[started separate thread] On Thu, 11 Nov 2010 00:58:31 +0100 Tomek Sowiński <j...@ask.me> wrote:
> Andrei Alexandrescu napisał: > > >> Speaking of getopt, when writing the 'grep' snippet I missed anonymous > >> options a lot: > >> > >> bool h, i; string expr; string[] files; > >> getopt(args, "h",&h, "i",&i,&expr,&files); > >> > >> They can be implemented with relatively little effort. > > > > Not getting the example. How would anonymous options work? > > // Let's match assignments. > auto args = ["program.exe", ".*=.*;", "file1.d", "file2.d", "file3.d"]; > bool h, i; string expr; string[] files; > getopt(args, "h",&h, "i",&i, &expr, &files); > assert(!h); > assert(!i); > assert(expr == ".*=.*;"); > assert(files == ["file1.d", "file2.d", "file3.d"]); > assert(args == ["program.exe"]); > > Staying conservative, anonymous options would only be allowed at the end of > the > option list, because their order matters (unlike named options). Perhaps this > can > be relaxed with time. I thought once at a default interface between the command-line and a program's startup routine, main(). The idea would be for main to have parameters automagically fed from whatever the user provides. With a command-line syntax inspired by named func call. It lets the program itself be called more or less like a func, via program-level parameter definition: // program "findword" int main (string filename, string word, bool verbose=false) {...} // use it $ findword filename=foo.txt word=foo verbose=true Parameters having default value can indeed be omitted by the user. Optionally, the first arg (often corresponding to the "object" on which a command applies, like the receiver in OO, and thus usually "obvious") can be automatically mapped to the first param of main: $ findword foo.txt word=foo This is, indeed, a language-specific feature. On the other hand, it brings to the user consistent program-call format -- rather than each program defining its own. Maybe after sometime the same syntax trick and syntax would adopted by other languages. I find this very coool on the programmer side as well. It must indeed by implemented in the language('s runtime) itself. To have such a feature without breaking any code, a possibility may be to use a different name than "main", eg "script". (I guess such a feature would make some difference in judging a language's adequacy to scripting.) What do you think? Denis -- -- -- -- -- -- -- vit esse estrany ☣ spir.wikidot.com