Oh come on. It is pretty obvious that you can add named parameters to a C-like syntax without having this weird square bracket stuff:
someObject->setColor(red:0.4, green:0.3, blue:1.0, alpha:0.5);
The square brackets are there because the original Objective-C compilier was very primitive. It basically looked for the square brackets, did some manipulation of the text, and passed everything to the C compiler. Pretty much it turned this:
[someObject method:x]
into this:
callMethod(someObject, "method", x)
Yes they were copied from smalltalk, but in smalltalk all functions used the same syntax. In this case the unnecessary differences in syntax were to make this compiler simple to implement.