Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [golo-dev] Return from main?

Indeed the proper way to have a JVM process return an exit value is
through System.exit(code), like in Java. We could have different
semantics in Golo and use the `main` function return value (if any), but
in the end of the day that would boil down to calling System.exit from
our runtime.

Note that here we have a JVM bytecode verifier error, so perhaps we
could investigate how to avoid that.

- Julien

On 11/10/16 23:08, Yannick Loiseau wrote:
> Vincent (2016-10-11 22:00):
>> Hello,
>>
>> I've subscribed with a different e-mail address. Hopefully this webmail
>> client will not completely mess up the formatting, unlike my primary
>> account's webmail client. Thanks for the nice replies on my first mail,
>> and Yannick, thanks for showing the more Golo-ish code :)
> 
> You're welcome.
> 
>>
>> Another question: can I do an early return from the main function?
>>
>> The following code...:
>>
>> ------
>>
>> module Test
>>
>> function main = |args| {
>>     return
>> }
>>
>> ------
>>
>> ...produces  a "java.lang.VerifyError: Method expects a return value"
>> traceback. I've also tried "return null" or return an integer, but with
>> the same result.
>>
>> I know some people consider it bad/questionable design when having
>> multiple exit paths in a single function, but especially for
>> command-line driven tools that need to validate various parameters, etc.
>> I think this can sometimes be justified.
> 
> The issue here is not having multiple exit path, since you can do it in
> functions, but that the `main` function will ends as a
> `public static void main(String[] args)` java method, and thus can't
> return anything. This will be required by the JVM (AFAIK). Indeed, since
> “nobody” is actually calling `main`, the returned value is meaningless
> 
> You can use `System.exit(code)` to early return (actually exit) from the
> `main` function.
> On your use case, if the parameters validation fails, you should
> `System.exit(1)` (or anything > 0) to let the shell know that something
> wrong happened.
> 
> 
> 
>> Kind regards,
>> Vincent
>> _______________________________________________
>> golo-dev mailing list
>> golo-dev@xxxxxxxxxxx
>> To change your delivery options, retrieve your password, or unsubscribe from this list, visit
>> https://dev.eclipse.org/mailman/listinfo/golo-dev
>>
>>
>>
>> _______________________________________________
>> golo-dev mailing list
>> golo-dev@xxxxxxxxxxx
>> To change your delivery options, retrieve your password, or unsubscribe from this list, visit
>> https://dev.eclipse.org/mailman/listinfo/golo-dev


Back to the top