JEP proposed to target JDK 11: 330: Launch Single-File Source-Code Programs

Roman Kennke roman at kennke.org
Thu May 17 21:19:00 UTC 2018


Yes, something like this.

A little bit more broadly speaking, in order to make it consistent, make
javac:
- accept and ignore #! in the first line
- don't enforce source filename convention as usual
- expect main method, etc, as outlined in the JEP

in other words: don't do the trickery of filtering etc in the launcher,
but in the compiler itself.

Roman

> What about special-casing javac to interpret #! as a single-line
> comment marker (synonym for //), for the first line of an input file,
> and nowhere else?
> 
> Thanks,
> 
> Ben
> 
> On Thu, May 17, 2018 at 9:50 PM, Roman Kennke <roman at kennke.org> wrote:
>> Am 17.05.2018 um 22:12 schrieb mark.reinhold at oracle.com:
>>> The following JEP is proposed to target JDK 11:
>>>
>>>   330: Launch Single-File Source-Code Programs
>>>        http://openjdk.java.net/jeps/330
>>>
>>> Feedback on this proposal is more than welcome, as are reasoned
>>> objections.  If no such objections are raised by 23:00 UTC on Thursday,
>>> 24 May, or if they're raised and then satisfactorily answered, then
>>> per the JEP 2.0 process proposal [1] I'll target this JEP to JDK 11.
>>>
>>> - Mark
>>>
>>>
>>> [1] http://cr.openjdk.java.net/~mr/jep/jep-2.0-02.html
>>>
>>
>> I like this proposal.
>>
>> I have a question about the shebang support though. If I write a
>> sourcefile Test.java like this:
>>
>> #!/usr/bin/java
>>
>> public class Test {
>>     public static void main(String[] args) {
>>         System.out.println("Hello");
>>     }
>> }
>>
>> ... then it's not a valid Java source file anymore, and (currently)
>> rejected by javac. I see that it is not relevant for the intended use
>> because the java launcher would strip the first line (except for the
>> newline). I still find it odd.
>>
>> In particular, it may end up confusing for the growing experience:
>> - people who start learning Java using this single-source feature will
>> find that shebang 'Java scripts' don't actually compile when passed to
>> the Java compiler
>> - the little Java script turns out to be 'too slow', hey, let's compile
>> it. Oops, doesn't work.
>> - the little Java scipt has grown to complicated and needs additional
>> classes, but doesn't compile.
>> - editors/IDEs might (rightly) flag it as errors
>>
>> etc
>>
>> I wonder if it might be reasonable to extend the JLS to allow for
>> shebang support too? Or maybe even don't extend the JLS but make
>> compilers behave nicely anyway? At the very least, there should be some
>> language in the JEP that mentions this issue. It is a complication that
>> seems more important than the mentioned "HelloWorld"-package with "java"
>> classname.
>>
>> Best regards, Roman
>>
> 




More information about the jdk-dev mailing list