One thing that made Logical Pathnames usable on Lisp Machines was that
big universities and research centers could afford a system
administrator to set up the logical pathnames for those users who
couldn't or wouldn't do system administration. Look at some Lisp
"libraries" of the 1980s-1990s—they pretty much require that kind of
setup.

It is not reasonable to require a random unix luser to edit his
~/.sbclrc (and similarly for any other implementation) to setup tens
of mappings with cryptic *.*.* wildcards, and then learn the fine
semantics of logical-pathnames to be able to maintain it, just so he
wants to use some random program that happened to be written in Lisp.

I remember the effort of common-lisp-controller (a.k.a c-l-c), in the
days of ASDF 1, to provide standardized access to Lisp software on
debian (with feeble attempts to make it work beyond debian). It was
hell to maintain for too small results. Moving this cruft into ASDF
itself, fixing ASDF where needed, and adding a
nicely-configured-with-good-defaults source-registry to ASDF was one
of the great victories of ASDF2, IMNSHO. Importantly: it works without
a system administrator, or deep system integration like c-l-c.

But ASDF still requires a user who only compiles one program at a time
into his binary cache.
You can't run random Lisp scripts that compile stuff in the background
without some eventual painful conflict;
your scripts have to be either interpreted, precompiled into an image, or flaky.

—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org
«A “pragmatist” is someone who admits that his own theory is worthless, and
his practice baseless—yet claims he knows better than you.»

On Mon, Dec 15, 2025 at 3:11 PM Scott L. Burson <[email protected]> wrote:
>
> Logical pathnames were invented for the Lisp Machine.  I believe the purpose 
> was to introduce a level of indirection between pathnames as written in code 
> (e.g. in 'defsystem' forms) and the actual physical locations, which could be 
> on any machine on the LAN, running any of several operating systems.  Then 
> the choice of physical location would be a matter of site configuration, 
> rather than requiring touching source code.
>
> I recall using logical pathnames on the LispM, and finding them clunky but 
> not unusable.  I believe much of the clunkiness originated from the fact that 
> for the first several years of LispM development, the sources were kept on 
> the MIT-AI PDP-10 running ITS, the aptly named Incompatible Timesharing 
> System developed at MIT for its own use.  ITS had a very restrictive filename 
> syntax: IIRC, digits and uppercase letters only, with a 6-character limit.  
> This, as I recall, allowed a filename to fit in a single 36-bit machine word.
>
> I haven't tried to use logical pathnames much in CL, so I don't have 
> firsthand experience like Faré's, but I don't doubt his report.  Perhaps they 
> were usable as long as there was only one implementation, but for CL, there 
> seems to have been a combination of them being underspecified and 
> implementors not being familiar with how they worked on the LispM.
>
> -- Scott
>
> On Mon, Dec 15, 2025, 8:32 AM David Cooper <[email protected]> wrote:
>>
>>
>> Hi Faré, and thanks for remaining active on these mailing lists, I'm getting 
>> that you're spread thin these days.
>>
>> Could you (or anyone who feels competent to explain it) tell us again what 
>> is a Logical Pathname (LP) and how does it differ from a Pathname object in 
>> general (as printed and readable by #P"some-string-representing-a-pathname") 
>> ? i have CLtL2 as well as Franz' "Common Lisp: The Reference" here on my 
>> shelf but, true confessions time, I have rarely cracked these books and I 
>> find them somewhat intimidating just to open and read for no specific 
>> reason. If anyone's explanations of pathnames and logical pathnames can 
>> refer to specific sections or passages from those books, I might dare crack 
>> them to look at those sections.
>>
>> One question I have is: Are Pathnames evil in general (and we should be 
>> working with bare strings as "pathname designators")? Or is it Logical 
>> Pathnames specifically that are evil.  Is a logical pathname a thing with 
>> the VMS-looking path syntax, e.g. `sys:some;logical;path;` as opposed to a 
>> Pathname object which is something like a struct with 6 slots (directory, 
>> name, type, host, device, version)?  Maybe the concepts are orthogonal, i.e. 
>> a Pathname object's string #P"<some-string>" can be of "native" format or in 
>> "logical pathname" format? So we could potentially get things like 
>> #P"/opt/gendl-ccl/gdl/program/gdl-ccl" or #P"sys:gdl-ccl".    And in the 
>> first case, HOST, DEVICE, VERSION would be unspecified, while in the second 
>> case the HOST is "sys:" and DEVICE and VERSION are still unspecified, or can 
>> a given HOST come along with its own default notion of DEVICE and VERSION 
>> just as it comes along with its notion of DIRECTORY, or do those other 
>> defaults come strictly from *default-pathname-defaults* ?   And is the 
>> Logical Pathname format meant to be able to accomodate all six of the slots 
>> in the Pathname object -- is that the connection between Pathnames and 
>> Logical Pathnames?
>>
>> None of these are burning questions, or blocking my productivity as far as I 
>> know (I tend to get things working by hook or by crook and leave them alone, 
>> and knock wood, pathnames per se have not been one of my big bottlenecks 
>> lately).  But I am curious to understand the systemic issues better i.e. if 
>> there are an identifiable finite list of shortcomings in the current ANSI 
>> spec that we could at least quarantine or create some kind of polyfill for 
>> it, although if I had understood Faré completely, maybe I would have 
>> understood that uiop is the closest thing we currently have to a "polyfill."
>>
>>
>> Dave Cooper
>>
>>
>>
>>
>>
>> ---- On Mon, 15 Dec 2025 03:30:49 -0500 Faré <[email protected]> wrote ---
>>
>> > Of course, the detailed behavior of LP translation is so poorly 
>> > constrained by the ANS that using LPs just squeezes the portability 
>> > toothpaste from one end of the tube to the other, out through the nozzle, 
>> > and onto your keyboard.
>> You'd think it's toothpaste, but actually it's radioactive sludge.
>> Don't touch it. Do go anywhere near it. Keep it away from kids, keep
>> it away from adults without a hazmat suit.
>>
>> Making UIOP and ASDF work with "Logical" pathnames was hell. And it
>> won't actually "work" that well: between limitations that SBCL
>> enforces but not others implementations, quirks and bugs of many
>> implementations, atrocious performance (guaranteed O(N)), and
>> impossibility for non-gurus to configure, much less debug... it's 100%
>> worse than using a variable and uiop:subpathname and/or
>> pathname-translations, 100% of the time. Only valid use I've ever seen
>> was to have location-independent debug information on CCL, but that
>> was CCL-only magic.
>>
>> Oh yeah, did you know that it's impossible to not have a HOST? And on
>> some implementation, the HOST will determine the syntax and various
>> limitations, such that you cannot, conceivably, have a portable
>> representation of pathname in CL, even less so in presence of Logical
>> Pathnames? Not that any of the standard functions (especially NOT
>> merge-pathnames, as you might like to believe) is designed to deal
>> with relative pathnames properly. It took me months to get UIOP to
>> kind of work correctly on portably most of the time for most of the
>> cases on most implementations... but absolutely not, never, not
>> possible using Logical Pathnames—UIOP will do its best, but the best
>> isn't very good.
>>
>> —♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• 
>> http://fare.tunes.org
>> “There are just two rules of governance in a free society:
>> Mind your own business. Keep your hands to yourself.” — P. J. O'Rourke
>>
>>
>>

Reply via email to