[armedbear-devel] Status of my work towards abcl-1.1
Mark Evenson
evenson at panix.com
Mon Oct 8 19:00:11 UTC 2012
After much banging around against issues involved in merging PATHNAME
objects when the defaults points to a JAR-PATHNAME, I think I am finally
converging on a solution. I have [committed a design document][1] that
describes my approach. The main user visible result here would be the
successful location and retrieval from the network of the JNA component
necessary for loading CFFI.
[1]: http://trac.common-lisp.net/armedbear/changeset/14172
The gist of the problem lies in that on non-Windows, the default DEVICE
component is NIL, which when merged with a JAR-PATHNAME which represents
the filesystem location of the jar archive in DEVICE, results in some
rather bad interactions.
At the top of problem, on non-Windows when the defaults contain a
JAR-PATHNAME:
1. (truename #p"/") fails.
2. Loading ASDF systems from jar files which declare dependencies on
other ASDF systems will fail.
My proposed solution is to:
1. On non-Windows, TRUENAME for a non-JAR-PATHNAME will set the DEVICE
of the result to :UNSPECIFIC.
2. Treat a JAR-PATHNAME as implicitly having a different HOST from
normal file PATHNAME, so that the result of a merge won't fill in a
DEVICE with the wrong "default device for the host" in the sense of the
fourth paragraph in the [CLHS description of MERGE-PATHNAMES][2] (the
paragraph beginning "If the PATHNAME explicitly specifies a host and not
a device…").
[2]: http://www.lispworks.com/documentation/HyperSpec/Body/f_merge_.htm
My (uncommitted) patches seem to resolve all the problems, and work on
both Windows and non-Windows. I still have two remaining ANSI failures
that the changes introduced, involving the value of
*COMPILE-FILE-TRUENAME* for which I need to rewrite the form which the
compiler dumps pathnames from #p"/foo/bar" to the #p(:directory
(:absolute "foo") :name "bar") form. Somehow, the new form isn't being
read correctly (Erik I could use your advice here).
In addition, since namestrings are no longer always roundtrippable as
they discard an :UNSPECIFIC DEVICE, I've had to change a bit of code in
the compiler and the Pathname implementation which assumed otherwise.
A cleaner solution would probalby have been to actually populate the
HOST field with a type nonce, like SBCL does. But we already use HOST
to store information for a URL-PATHNAME. And given the reality that we
should release an abcl-1.1.0 as soon as realistically possible, when I
estimated that going down this route would change much more code I opted
for the current solution where we take a cut at "Do What I Mean"
reasoning we could potentially retrofit this with HOST containing
various HOST forms for abcl-1.2.x if enough objections were raised.
Comments solicited.
--
"A screaming comes across the sky. It has happened before, but there is
nothing to compare it to now."
More information about the armedbear-devel
mailing list