diff --git a/doc/design.htm b/doc/design.htm
index 084ab1a..79abceb 100644
--- a/doc/design.htm
+++ b/doc/design.htm
@@ -35,7 +35,7 @@ perform portable filesystem operations on directories and their contents. The
Filesystem Library was developed to fill that void.
The intent is not to compete with traditional scripting languages, but to
-provide a solution for situations like Boost, where C++ is already the language
+provide a solution for situations where C++ is already the language
of choice..
@@ -100,12 +100,23 @@ of choice..
Libraries with elaborate interfaces and difficult to port specifications are much less likely to be accepted for
standardization.
- The usual Boost requirements for any library also apply.
+ The usual Boost requirements and
+ guidelines apply.
Encourage, but do not require, portability in path names.
+
+ Rationale: For paths which originate from user input it is unreasonable to
+ require portable path syntax.
- Avoid the illusion of portability where portability in fact does not
- exist.
+ Avoid giving the illusion of portability where portability in fact does not
+ exist.
+
+ Rationale: Defining important behavior unspecified or "implementation defined" does a
+ great disservice to programmers using a library because it makes it appear
+ that code relying on the behavior is portable, when in fact there is nothing
+ at all portable about it. The only case where such under-specification is acceptable is when both users and implementors know from
+ other sources exactly what behavior is required, yet for some reason it isn't
+ possible to specify it exactly.
@@ -122,10 +133,10 @@ of choice..
- Some file systems (ISO-9660, level 1, for example) use very restricted
(so-called 8.3) file names.
- - Some file systems allow other file systems with completely different
+
- Some file systems allow other file systems with different
characteristics to be "mounted" within a directory tree. Thus a
ISO-9660 or Windows
- file system may end up as a sub-tree of a Unix directory tree.
+ file system may end up as a sub-tree of a POSIX directory tree.
- Wide-character versions of directory and file operations are available on some operating
systems, and not available on others.
@@ -137,12 +148,12 @@ of choice..
number". Some don't.
- Not all file systems use single character separators in path names. Some use
- paired notations. A typical fully-specified VMS filename
+ paired notations. A typical fully-specified OpenVMS filename
might look something like this:
DISK$SCRATCH:[GEORGE.PROJECT1.DAT]BIG_DATA_FILE.NTP;5
- The general format is:
+ The general OpenVMS format is:
Device:[directories.dot.separated]filename.extension;version_number
@@ -154,10 +165,10 @@ of choice..
pathname itself, and not the platform. Determining collating sequence is even
worse.
- - Directory trees, directories, files, and file attributes are in effect shared between all threads, processes, and computers which have access to the
+
- Race-conditions may occur. Directory trees, directories, files, and file attributes are in effect shared between all threads, processes, and computers which have access to the
filesystem. That may well include computers on the other side of the
world or in orbit around the world. This implies that file system operations
- may fail in unexpected ways. For example:
+ may fail in unexpected ways. For example:
assert( exists("foo") == exists("foo") );
// may fail!
@@ -169,7 +180,7 @@ of choice..
replaced by a directory of the same name between the calls to is_directory().
- Even though an application may be portable, it still will have to traffic
- in system specific paths occasionally; operated provided input is a common
+ in system specific paths occasionally; user provided input is a common
example.
@@ -203,6 +214,11 @@ answers to that question, the Filesystem Library alerts programmers of the need
to ask it in the first place.
operations.hpp
+Dietmar Kühl's original dir_it design and implementation supported
+wide-character file and directory names. It was abandoned after extensive
+discussions among Library Working Group members failed to identify portable
+semantics for wide-character names on systems not providing native support. See
+FAQ.
Previous iterations of the interface design used explicitly named functions providing a
large number of convenience operations, with no compile-time or run-time
options. There were so many function names that they were very confusing to use,
@@ -268,7 +284,7 @@ Variable Considered Harmful, ACM SIGPLAN Notices, 8, 2, 1973, pp. 23-34
© Copyright Beman Dawes, 2002
Revised
-30 July, 2002
+13 September, 2002