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