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

Peter Levart peter.levart at
Tue May 22 11:44:19 UTC 2018

Perhaps Linux (and other Unixes) could be modified to accept la-la-bang:


in addition to shebang:


No, I'm not kidding (mostly). Most "scripting" languages have "#" as 
comment-introducing character. Supporting la-la-bang could open doors 
for executable files written in other C++-like languages that choose 
"//" as comment-introducing characters...

Regards, Peter

On 05/18/2018 08:05 AM, Volker Simonis wrote:
> Hi,
> I fully assist Roman and his proposal. I actually proposed this myself
> during the initial proposal of the JEP [1] but my request was rejected
> by Brian because they don't seem to want to change the JLS for this
> feature. To cite him:
> "Its simpler than that.  There are NO changes to the JLS, nor even any
> (IIRC) changes to the compiler.  This is all in the command-line
> launcher.  This is not a Java language feature. The scope is JDK, not
> SE."
> I'm still unhappy about that decision (because of the obvious
> arguments mentioned by Roman) but if the community finally decides to
> implement this feature without changing the JLS the JEP should at
> least mention that explicitly in a "Non-Goals" section (e.g. something
> like "It is out of scope of this JEP to maintain compatibility between
> a Java source file as specified by the JLS and a source files which
> are intended to be executed by the single file source code launcher").
> Also notice that the shebang problem is not the only source of
> incompatibility, but also the proposal that "the compiler does not
> enforce the optional restriction defined at the end of JLS §7.6, that
> a type in a named package should exist in a file whose name is
> composed from the type name followed by the .java extension". The
> restriction is "optional", but to my knowledge still widely adapted
> (and I'm not sure, but this may still require a change to the current
> compiler in contrast to what Brian mentioned in the earlier
> conversation).
> Thank you and best regards,
> Volker
> [1]
> On Thu, May 17, 2018 at 11:19 PM, Roman Kennke <roman at> wrote:
>> 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> wrote:
>>>> Am 17.05.2018 um 22:12 schrieb mark.reinhold at
>>>>> The following JEP is proposed to target JDK 11:
>>>>>    330: Launch Single-File Source-Code Programs
>>>>> 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]
>>>> I like this proposal.
>>>> I have a question about the shebang support though. If I write a
>>>> sourcefile 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