source: trunk/abcl/doc/design/pathnames/merging-defaults.markdown @ 14172

Last change on this file since 14172 was 14172, checked in by Mark Evenson, 8 years ago

Document current plans for resolution of issues involving the merging with JAR-PATHNAME defaults.

File size: 3.2 KB
Line 
1# ISSUE MERGE-PATHNAMES with specialization of JAR-PATHNAME
2
3We wish to resolve the following issues.
4
5## UC0 Loading jna.jar for CFFI via Quicklisp
6
7This happens in loading systems via ASDF recursively in jars, most
8importantly for those packaged in 'abcl-contrib.jar', which prevents
9CFFI from loading the necessary JNA code.
10
11## UC1.1
12If *DEFAULT-PATHNAME-DEFAULTS* is a JAR-PATHNAME, commands that would
13normally be expected to work such as
14
15    CL-USER> (probe-file #p"/")
16   
17will fail. 
18
19### UC1.2
20
21If *DEFAULT-PATHNAME-DEFAULTS* is a JAR-PATHNAME, COMPILE-FILE
22operations specifying an OUTPUT-FILE with a NIL DEVICE will fail, as
23COMPILE-FILE-PATHNAME is required to merge its arguments with the
24defaults.
25
26## CLHS Citations
27
28Some especially relevant portions of the CLHS for consideration.
29
30###  19.2.3 Merging Pathnames
31http://www.lispworks.com/documentation/HyperSpec/Body/19_bc.htm
32
33"Except as explicitly specified otherwise, for functions that
34manipulate or inquire about files in the file system, the pathname
35argument to such a function is merged with *default-pathname-defaults*
36before accessing the file system (as if by merge-pathnames)."
37
38Note that this implies that the arguments to PARSE-NAMESTRING--which
39is what the SHARSIGN-P reader macro correpsponds to--should not be
40merged.
41
42
43## 19.2.2.2.3 :UNSPECIFIC as a Component Value
44http://www.lispworks.com/documentation/HyperSpec/Body/19_bbbc.htm
45
46"If :unspecific is the value of a pathname component, the component is
47considered to be ``absent'' or to ``have no meaning'' in the filename
48being represented by the pathname."
49
50Having an :UNSPECIFIC DEVICE when a PATHNAME refers to a file would
51address problems when merging when the defaults contains a JAR-PATHNAME.
52
53### MERGE-PATHNAMES
54http://www.lispworks.com/documentation/HyperSpec/Body/f_merge_.htm
55
56"If pathname explicitly specifies a host and not a device, and if the
57host component of default-pathname matches the host component of
58pathname, then the device is taken from the default-pathname;
59otherwise the device will be the default file device for that host. If
60pathname does not specify a host, device, directory, name, or type,
61each such component is copied from default-pathname."
62
63This suggests that the contents HOST should be considered as an
64additional axis of type for PATHNAME, so that when PATHNAMES of
65differing types get merged, a DEVICE which has no meaning for a given
66type does not get inserted.
67
68## Other implementations
69
70A survey of the the "default" host for #p"/" on startup.
71
72### SBCL
73
74A host nonce which appears in the reader as
75#<SB-IMPL::UNIX-HOST {1000290443}>.  (Is there a different one under
76Windows?)
77
78### CLISP
79
80HOST is NIL.
81
82### CCL
83
84HOST is :UNSPECIFIC.
85
86### ECL
87
88HOST is NIL.
89
90## Implementation
91
92### TRUENAME sets DEVICE to :UNSPECIFIC
93
94TRUENAME sets DEVICE to :UNSPECIFIC running on non-Windows when
95resolving a path to a plain file.
96
97### Use an implicit type for merging
98
99In the case for which a merge occurs when DEFAULT-PATHNAME
100is a JAR-PATHNAME and the following conditions hold:
101
1021.  HOST and DEVICE of the PATHNAME are NIL
103
1042.  The DIRECTORY of the PATHNAME represents an absolute path.
105
1063.  We are not on Windows.
107
108we set the DEVICE to be :UNSPECIFIC.
109
110### COLOPHON
111
112Mark <evenson@panix.com>
113Created:  01-SEP-2012
114Revised:  08-OCT-2012
115
Note: See TracBrowser for help on using the repository browser.