Mount Unix system into Common Lisp image
github.com
github.com
https://github.com/ocicl/ocicl
(Lisp users are generally very anachronistic people who don't understand dependency management nor know how to resolve diamond dependency issues, ocicl is one of the better approaches along with CLPM but they both get a lot of pushback from the community which "don't see a need".
For what it's worth, oras is packaged in homebrew for both mac and linux, and the homebrew ocicl package uses this instead of its own.
CLPM is an interesting project but not used very often since projects rarely version anything in the CL ecosystem (not even branch tags anymore). Personally, I have never seen a library that suggests CLPM for installation.
Roswell is a CLI tool that manages Common Lisp installations, with Quicklisp set up automatically.
Never heard of Qlot or Docker being used.
My biggest gripe is the fact Quicklisp is widely used and no notion of version dependencies exist (not even lockfiles exist). So Common Lisp code with tons of Quicklisp dependencies tends to rot really fast. e.g. it's practically impossible today to build projects like https://github.com/akamai/cl-http2-protocol
> no notion of version dependencies exist (not even lockfiles exist
I think that’s the point of Qlot
I wish someone would write something better, but on the other hand; we can quickly build anything we need with the tooling we have without the need for libraries. Basically; set up what you need and consider it 'your responsibility' now. I think that's the healthy way to handle libraries anyway, in any ecosystem; bad actors are everywhere and 'just updating/upgrading' stuff is such a bad idea usually.
Don't get me wrong; I do feel your pain when you want to try out something; you have to have some understanding or how to work with CL and the tooling to get up projects that have rotted over time, but it's not hard. I recently added a library that is 12 years old to our project and it took a few minutes to fix some of the deps; now it's in our repos and works perfectly.
For other work, I have to work in the nextjs / npm ecosystem and good lord am I happy CL doesn't have that; almost every library is terrible; I became a contributor to 100s of npms over the years because they almost all truly suck. Just 'quickly do this and that, npm publish, alright works for me kthnxbye'. Massively (over-invested some of them with millions of VC$) used projects in NPM contain seriously painful bugs that remain open for months or years (or wontfix... it's a bug mate, not a feature). Most major ones take me more time to debug and fix than I would write them from scratch in our CL tooling.
Sorry for the rant.
Why is mcd a macro? And isn’t it missing a gensym?
As for why it's a macro rather than a function, I don't know, but it's possible that one of the features (probably variable substitution) is important.
(frobnicate (mcd (foo bar)))
Gets expanded to: (frobnicate (fg
(mkdir -p (foo bar))
(cd (foo bar))))
At compile-time. I personally would have used a function declared inline, though.Ask HN: Whats the difference between qlot vs. ocicl? (SBCL package managers)