jshell tool: opinions sought -- double-dash long-form command-line options
Jonathan Gibbons
jonathan.gibbons at oracle.com
Thu Aug 18 16:15:47 UTC 2016
While I agree that -J is pulled out by the launcher, syntactically -J
and -R are both "just" single character options that take a value and
fall within the general GNU-style scheme. (But yeah, it starts getting
woolly when you start mixing single character options and arguments.)
-- Jon
On 08/17/2016 01:23 PM, Robert Field wrote:
>
> On 08/17/16 12:44, Jonathan Gibbons wrote:
>> For new code, I think 2 is to be preferred, with an optional minor
>> allowance for alternate forms of --help. But a clean modern 2 is OK too.
>
> -h
>
> Would be supported
>
> -help
>
> Would be a combined option which starts with "-h" so that works too.
>
> The only remaining niggles are:
>
> -J<flag> Pass <flag> directly to the runtime system.
>
> -R<flag> Pass <flag> to the remote runtime system.
>
>
> The first of which issupported by the launcher.
>
> -Robert
>
>
>>
>> -- Jon
>>
>> On 08/17/2016 12:35 PM, Robert Field wrote:
>>> I believe the reasonable choices are:
>>>
>>> (1) Kitch-sink: support new options with modern syntax and legacy
>>> options in legacy syntax and modern syntax. Disallow combined options.
>>>
>>> (2) Clean modern: Like jmod. All double-dash multiple-letter or
>>> single-dash single-letter. Allow combined single-letter options.
>>>
>>> -Robert
>>>
>>>
>>>
>>>> On Aug 17, 2016, at 12:05 AM, Michael Müller
>>>> <michael.mueller at mueller-bruehl.de
>>>> <mailto:michael.mueller at mueller-bruehl.de>> wrote:
>>>>
>>>> Hi Robert,
>>>>
>>>> What about Java itself?
>>>>
>>>> java -version
>>>>
>>>> Thus, keep it.
>>>>
>>>> Keep
>>>> -cp ...
>>>> --class-path ...
>>>> But elimate
>>>> -classpath ...
>>>>
>>>> Just my 2cts
>>>> --
>>>> Herzliche Grüße, Best regards
>>>> Michael Müller
>>>>
>>>> Twitter: @muellermi
>>>> Blog: blog.mueller-bruehl.de <http://blog.mueller-bruehl.de/>
>>>> Web Development with Java and JSF: leanpub.com/jsf
>>>> <http://leanpub.com/jsf>
>>>> Java Lambdas and Parallel Streams: leanpub.com/lambdas
>>>> <http://leanpub.com/lambdas>
>>>>
>>>>
>>>> Am 17. August 2016 07:44:44 MESZ, schrieb Robert Field
>>>> <robert.field at oracle.com <mailto:robert.field at oracle.com>>:
>>>>
>>>> If jmods does not support legacy single-dash multiple-letter options,
>>>> then should jshell?
>>>>
>>>> Should we trim it down to --
>>>>
>>>> --class-path <path> Specify where to find user class files
>>>>
>>>> --module-path <module path>... directory of modules.
>>>> -p <module path>
>>>>
>>>> --upgrade-module-path <module path>... directory of modules that
>>>> replace upgradeable modules
>>>>
>>>> --add-modules <modulename>[,<modulename>...] root modules to resolve
>>>>
>>>> --startup <file> One run replacement for the start-up definitions
>>>>
>>>> --no-startup Do not run the start-up definitions
>>>> -n
>>>>
>>>> --feedback <mode> Specify the initial feedback mode. The mode
>>>> may be
>>>> predefined (silent, concise, normal, or
>>>> verbose) or
>>>> previously
>>>> user-defined
>>>>
>>>> -q Quiet feedback. Same as: --feedback concise
>>>>
>>>> -s Really quiet feedback. Same as: --feedback silent
>>>>
>>>> -v Verbose feedback. Same as: --feedback verbose
>>>>
>>>> -J<flag> Pass <flag> directly to the runtime system.
>>>>
>>>> -R<flag> Pass <flag> to the remote runtime system.
>>>>
>>>> --help Print this synopsis of standard options
>>>> -h
>>>>
>>>> --version Version information
>>>>
>>>> --full-version Full Version information
>>>>
>>>> Eliminating --
>>>>
>>>> -classpath <path> Specify where to find user class files
>>>> -cp <path>
>>>>
>>>> -help Print this synopsis of standard options
>>>>
>>>> -version Version information
>>>>
>>>> -fullversion Full Version information
>>>> Note: -qq is switched to -s. And, per Jon's suggestion, changed the
>>>> spelling of --no-startup and --full-version to include separating dashes.
>>>>
>>>> With this, single-letter options could be combined: e.g. -nq
>>>>
>>>> -Robert
>>>>
>>>> On 08/16/16 10:19, Jonathan Gibbons wrote:
>>>>
>>>> Ben, The argument about consistency between tools was
>>>> intended to be specific to the syntax and semantics of
>>>> specific options, like --class-path, --module-path,
>>>> --add-modules, etc. I didn't mean it to extend to "all ways
>>>> of specifying a classpath", as in "--class-path",
>>>> "-classpath", and "-cp". jmods, for example, is a new tool,
>>>> that only supports --class-path (not -classpath, -cp) --
>>>> Jon On 08/16/2016 10:12 AM, Ben Evans wrote:
>>>>
>>>> +1 to not mixing options. +1 to using JOptSimple It's
>>>> also worth pointing out that one at least one major
>>>> supported platform (Mac), the shortcuts are not all
>>>> present by default, so while one can just say "javac"
>>>> and it works, "jshell" (or "jjs") do not work out of
>>>> the box. This is apparently due to legacy Apple
>>>> packaging requirements that we can do nothing about,
>>>> and is highly annoying. However, it does weaken the
>>>> argument that arguments should be entirely consistent
>>>> between tools, because the end user would have had to
>>>> engage in a certain amout of platform hackery to make
>>>> jshell work in the same way as the rest of the pre-Java
>>>> 7 tools in $JAVA_HOME/bin I'd therefore argue that this
>>>> is evidence in support of dropping the older-style of
>>>> options and using the modern double-dash style as the
>>>> default, along with whatever shortcuts / additional
>>>> accommodations make sense. Just my 2c, Ben On Tue, Aug
>>>> 16, 2016 at 10:33 PM, Jonathan Gibbons
>>>> <jonathan.gibbons at oracle.com
>>>> <mailto:jonathan.gibbons at oracle.com>> wrote:
>>>>
>>>> Other new tools are using JOptSimple, so that is
>>>> certainly a reasonable route, but that would
>>>> (probably) imply dropping old-style options like
>>>> -classpath and -cp. For a new tool, that would be
>>>> very reasonable. I agree that mixing old-style
>>>> options and combined single letter options is a bad
>>>> idea. -- Jon On 08/16/2016 09:47 AM, Robert Field
>>>> wrote:
>>>>
>>>> On Aug 16, 2016, at 8:07 AM, Jonathan
>>>> Gibbons <jonathan.gibbons at oracle.com
>>>> <mailto:jonathan.gibbons at oracle.com>
>>>> <mailto:jonathan.gibbons at oracle.com>>
>>>> wrote: Robert, Strong input: options that
>>>> are common across tools should be the same
>>>> across tools, for example, the set of
>>>> module options. You're already suggesting
>>>> that, so that's good. Additional input:
>>>> double-dash options are typically a short
>>>> series of words separated by hyphens
>>>> (instead of concatenated words), so that
>>>> makes for --no-startup instead of —nostartup.
>>>>
>>>> Ah! Good point.
>>>>
>>>> Note that double-dash options should allow
>>>> '=' as a separator instead of white-space,
>>>> as in --class-path=my:class:path This is
>>>> not typically spelled out in detail in
>>>> command line help, but there is t! ypically
>>>> a footnote to that effect at the end of the
>>>> help.
>>>>
>>>> Right. I was pointed at JOpt-Simple since it
>>>> does option parsing. I don’t think I’ll use it
>>>> since error handling seems to lack the control
>>>> I need. But, from that, I saw the =arg
>>>> requirement. That should be easy to hand-craft.
>>>> It also allows combining single-letter
>>>> single-dash options, like -nq instead of -n -q.
>>>> Given the multi-letter single-dash options, I’m
>>>> not sure that makes sense to do. (continued)
>>>>
>>>> -- Jon On 08/15/2016 10:35 PM, Robert Field
>>>> wrote:
>>>>
>>>> We would like the jshell tool to
>>>> roll-out using the more modern
>>>> double-dash options. Note though that!
>>>> it will ship in the jdk/bin directory
>>>> where almost all commands use legacy
>>>> option formats. Below I propose options
>>>> for jshell, as this is not a
>>>> black-and-white decision, I'd very much
>>>> like input.... Current jshell options
>>>> are -- -classpath <path> Specify where
>>>> to find user class files -cp <path>
>>>> Specify where to find user class files
>>>> -startup <file> One run replacement for
>>>> the start-up definitions -nostartup Do
>>>> not run the start-up definitions
>>>> -feedback <mode> Specify the initial
>>>> feedback mode. The mode may be
>>>> predefined (silent, concise, normal, or
>>>> verbose) or previously user-defined -q
>>>> Quiet feedback. Same as: -feedback
>>>> concise -qq Really quiet feedback. Same
>>>> as: -feedback silent -v Verbose
>>>> feedback. Same as: -feedback verbose
>>>> -J<flag> Pass <flag> directly to the
>>>> runtime system. Use one -J for each
>>>> runtime flag or flag argument -R<flag>
>>>> Pass <flag> to the remote runtime
>>>> system. Use one -R for each remote flag
>>>> or flag argument -help Print this
>>>> synopsis of standard options -version
>>>> Version information -fullversion Full
>>>> Version information java options are
>>>> mostly single-dash options, the current
>>>> double-dash options are -- -cp <class
>>>> search path of directories and zip/jar
>>>> files> -classpath <class search path of
>>>> directories and zip/jar files>
>>>> --class-path <class search path of
>>>> directories and zip/jar files> ! A :
>>>> separated list of directories, JAR
>>>> archives, and ZIP archives to search
>>>> for class files. -p <module path>
>>>> --module-path <module path>... A :
>>>> separated list of directories, each
>>>> directory is a directory of modules.
>>>> --upgrade-module-path <module path>...
>>>> A : separated list of directories, each
>>>> directory is a directory of modules
>>>> that replace upgradeable modules in the
>>>> runtime image -m <module>[/<mainclass>]
>>>> --module <modulename>[/<mainclass>] the
>>>> initial module to resolve, and the name
>>>> of the main class to execute if not
>>>> specified by the module --add-modules
>>>> <modulename>[,<modulename>...] root
>>>> modules to resolve in addition to the
>>>> initialmodule. <modulename> can also be
>>>> ALL-DEFAULT, ALL-SYSTEM,
>>>> ALL-MODULE-PATH. --limit-modules
>>>> <modulename>[,<modulename>...] limit
>>>> the universe of observable modules
>>>> --list-modules
>>>> [<modulename>[,<modulename>...]] list
>>>> the observable modules and exit
>>>> --dry-run create VM but do not execute
>>>> main method. This --dry-run option may
>>>> be useful for validating the
>>>> command-line options such as the module
>>>> system configuration. Of these,
>>>> --class-path, --module-path,
>>>> --add-modules, and maybe
>>>> --upgrade-module-path seem appropriate
>>>> for jshell. Proposed for jshell --
>>>> -classpath <path> Specify where to find
>>>> user class files -cp <path>
>>>> --class-path <path> -p <module path>!
>>>> directory of modules. --module-path
>>>> <module path>... --upgrade-module-path
>>>> <module path>... directory of modules
>>>> that replace upgradeable modules
>>>> --add-modules
>>>> <modulename>[,<modulename>...] root
>>>> modules to resolve --startup <file> One
>>>> run replacement for the start-up
>>>> definitions --nostartup Do not run the
>>>> start-up definitions
>>>>
>>>> Would be better as --no-startup
>>>>
>>>> Y
>>>>
>>>> -n --feedback <mode> Specify the
>>>> initial feedback mode. The mode may be
>>>> predefined (silent, concise, normal, or
>>>> verb! ose) or previously user-defined
>>>> -q Quiet feedback. Same as: --feedback
>>>> concise -qq Really quiet feedback. Same
>>>> as: --feedback silent -v Verbose
>>>> feedback. Same as: --feedback verbose
>>>> -J<flag> Pass <flag> directly to the
>>>> runtime system. -R<flag> Pass <flag> to
>>>> the remote runtime system. --help Print
>>>> this synopsis of standard options -help
>>>> -h -version Version information
>>>> --version -fullversion Full Version
>>>> information --fullversion
>>>>
>>>> ?? --full-version ??
>>>>
>>>> Probably, y. Thanks much, Robert
>>>>
>>>> Thanks, Robert
>>>>
>>>>
>>>
>>
>
More information about the kulla-dev
mailing list