[External] : Re: Case-insensitive file systems and output file clashes - survey
Jonathan Gibbons
jonathan.gibbons at oracle.com
Fri Feb 24 01:25:42 UTC 2023
On 2/23/23 1:06 PM, Archie Cobbs wrote:
> On Thu, Feb 23, 2023 at 1:33 PM Jonathan Gibbons
> <jonathan.gibbons at oracle.com> wrote:
>
> On 2/22/23 10:59 AM, Archie Cobbs wrote:
>
>> On Wed, Feb 22, 2023 at 12:12 PM Jonathan Gibbons
>> <jonathan.gibbons at oracle.com> wrote:
>>
>> On 2/22/23 8:06 AM, Archie Cobbs wrote:
>>>
>>> Add a new option -Xlint:fileclash that enables checking for
>>> clashes (e.g., at the JavacFileSystemManager layer).
>>>
>> That would likely either be a partial solution, or an
>> expensive one for a complete solution when taking separate
>> compilation into account.
>>
>> I was thinking separate compilation would definitely not be
>> supported (too complicated).
>>
>> Given that assumption, would it necessarily be only a partial fix?
>
> Yes, it would be a partial fix, because by your own assumption, it
> would not cover some important cases.
>
> Well I guess I meant, would it be "partial" in some way besides the
> fact that separate compilations are not taken into account.
>
> Digressing a bit, I'm not sure I agree that not supporting separate
> compilations makes it partial. Isn't a "compilation" the extent of the
> unit of work that a compiler is being asked to do? Asking it to solve
> problems that span multiple compilations seems out of scope. Or maybe
> I'm misunderstanding what you mean by "compilation".
Compiling against precompiled class files is expecting javac to solve a
problem spanning multiple compilations. :-)
That being said, I agree it is a reasonable expectation that any one
compilation should not write the same physical file more than once, and
so it might be reasonable to have a possibly always-on diagnostic if
that situation is detected, perhaps even an error. Like the (separate)
zip file discussion, this could be handled inside a custom file
manager. The challenge may be in specifying the behavior correctly, and
not over-promising in the command-line help or man page. But if you
stick to something like the following in the man page, you may be OK:
An error will be reported if any file is written more than once
during a compilation. This may occur in the following situations:
list-of-known-situations
> Also, the problem of file system issues is more than just
> case-clash class names; on Windows, you cannot (or used not to be
> able) to write files like CON, NUL, etc. (I haven't checked
> Windows to see if there are still issues there.)
>
> Yes, but in those cases an error is generated, right? In contrast of
> course the problems that stem from case-insensitive filesystems are
> "silent" errors.
>
>
>>> 1. Add new compiler flags -dzip, -szip, -hzip
>>> (corresponding to -d, -s, -h) that specify ZIP files for
>>> output instead of directories
>>>
>> I would recommend using the existing options, and just allow
>> those options to specify a zip file, and then open the file
>> with `zipfs`. That being said, updating zip files by
>> "overwriting" existing entries comes with its own set of
>> problems.
>>
>> Yep.. for efficiency you'd probably need to do some gymnastics,
>> e.g., have a staging directory, and then at the very end of the
>> compilation write out a new ZIP file using merge sort with the
>> original (if any).
>>
> If anyone were to pursue this, I would recommend that it be done
> at least 99.99% in a separate implementation of
> `java.nio.file.FileSystem`, and not directly in javac itself.
> Such a FileSystem could be used without changing javac at all when
> invoking javac through its API (i.e.
> `javax.tools.JavaCompiler.getTask`), or with minimal change to
> command-line javac to specify the use of that file system.
>
> That's a neat approach.
>
> The idea of a javac flag like --use-filesystem-impl
> com.foobar.MyFileSystem is something that could be useful in its own
> right.
>
> -Archie
>
> --
> Archie L. Cobbs
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/compiler-dev/attachments/20230223/78bdcd91/attachment-0001.htm>
More information about the compiler-dev
mailing list