::= ['?'] | '?' '='
for optional argument with default value, no whitespace around the '=' that links the variable name to the default value
(whitespace is reserved for separating arguments in the declaration)
arguments are type-undeclared, therefore should optional arguments be only at the end of the argument list, for ease of processing?
would there be a perceived need for a catch-all argument at the end of the argument list, a collection to contain any unmatched values passed? I've seen this done in another language using their slice notation of '@'