JEP proposed to target JDK 11: 330: Launch Single-File Source-Code Programs (original) (raw)
Peter Levart peter.levart at gmail.com
Tue May 22 11:44:19 UTC 2018
- Previous message: JEP proposed to target JDK 11: 330: Launch Single-File Source-Code Programs
- Next message: JEP proposed to target JDK 11: 330: Launch Single-File Source-Code Programs
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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] http://mail.openjdk.java.net/pipermail/jdk-dev/2018-February/thread.html#718 On Thu, May 17, 2018 at 11:19 PM, Roman Kennke <roman at kennke.org> 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 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
- Previous message: JEP proposed to target JDK 11: 330: Launch Single-File Source-Code Programs
- Next message: JEP proposed to target JDK 11: 330: Launch Single-File Source-Code Programs
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]