[MLton] mlbs and soft and hard links
Sun, 15 Aug 2004 08:10:13 -0700
There are a couple of subtleties about the semantics of mlbs that are
worth clarifying and explaining in the informal section of the mlb
As I understand it, the meaning of an mlb file as a soft link is to
define the contents of the mlb file to be the contents of the link
(after following until you reach a file). For example, suppose we
have the following four files.
z.mlb: --> a/a.mlb (soft link)
Then the program produced by compiling z.mlb prints "outer", not
"inner. The sublety (to me anyway) is that we don't "follow" the soft
link by switching to its working directory. I think this is the
correct decision, because it hides the detail of the underlying file
system (the fact that the file is a soft a link) and views the
filesystem as a map from absolute path to file contents.
On the other hand, suppose we have the following five files.
b/b.mlb: --> a/a.mlb (hard link)
Then, the program produced by compiling z.mlb prints "a", but does not
print "b". I think the program should print "a" and then "b", under
the (simple) model of the filesystem as a map from absolute path to
file contents. I especially think it odd that we have chosen to
expose hard links but not soft links.
I guess what I am saying is that the correct unit of caching for mlb
files in the elaborator is *not* OS.FileSys.file_id, but rather
absolute path. I don't see any reason to complicate the semantics
with notions from the underlying file system.