Personally I like function syntax much better and will use it everywhere possible. (which will just be "everywhere" eventually)
I also agree with IsNull's point that command syntax is sometimes very confusing. Sometimes it's plain text, sometimes an expression is supported, sometimes it HAS to be a single variable because it's an output param, "if I use %var% in this param will it use the contents of var or try to double-dereference it?" etc... the manual must be consulted constantly, whereas functions don't have any of these specific problems.
HOWEVER, this is only my opinion, and command vs function syntax is a very personal coding style choice
and should be left as such. I thought Lexikos made it clear that he would definitely support both function or command syntax for all methods, so I wonder why this is even being discussed.
IsNull: you're working closely with IronAhk and iirc poly has also expressed that he would fully support both function and command syntax for all methods as well, so I'm curious why you're arguing for this.Anyway, another topic
Lexikos: We have a bit of a problem with commands that have multiple output args/vars. How to return them with a single return value when they are converted to functions?
How about this: in v2, for any methods that have multiple outputs in v1, return an Object with the v1 param names as the keys.
For v2 you could also remove any multi-output vars for the command syntax and change it to *one* output var that contains an object just like the function syntax suggested above.
WinGetPos, X, Y, Width, Height, My Window
msgbox %X%, %Y%, %Width%, %Height%
;v2 function syntax
out := WinGetPos("My Window")
msgbox(out["X"] ", " out["Y"] ", " out["Width"] ", " out["Height"])
;v2 command syntax
WinGetPos, out, My Window
msgbox %out["X"], %out["Y"], %out["Width"], %out["Height"] ;of course this syntax still needs ironing out
There's something which I want to be removed: dynamic variable references
Hmmm, I think I like this idea, maybe.