"Parentheses sometimes create first-class lists in Python"
No, they never do. (don't know about ruby) Square brackets are for that. No problems with syntax this way.
"They also sometimes group expressions and disambiguate precedence"
But it's obvious: "expr ( [expr ,]* expr)" is a call - always. "(expr)" is for precedence. "([expr,]+)" is a tuple. Same as in 99% (made up number) of languages you encounter.
OTOH, in Perl, you've got the same expression that creates a list in one case, but not in the other, which is simply confusing. To be honest, I don't know of any other language that does it. You can call my expectations to be appropriate for a pastiche of whatever other language - yes - all the other languages I know / heard of, work the way I expected... and don't force me to learn rules that work based on context. Similarity between languages is a "good thing".
If you like that syntax, good for you. But I fully understand people who'd rather not be surprised this way. To me it doesn't make sense to be that different. I think Steve Yegge knew exactly what () do when he was writing his blog - he was simply complaining about that unexpected behaviour.
Your "obvious" rules are as arbitrary as those of any other language.
What is the difference between a tuple and a list that's "obvious" to a novice programmer? (Yes, you may claim that I change my argument to talk about lists versus tuples, but if you want to press on this line of thinking, Python's syntax for list and list-of-list declaration is the same as Perl's syntax for anonymous array declaration.)
Which parts of the requirement for a trailing comma after the first element of a single-element tuple are "obvious" to a novice programmer?
Which of those "obvious" rules are obvious cognates with other programming languages?
(What's "obvious" about Smalltalk having a strict left-to-right evaluation order, ignoring "obvious" mathematical precedence rules which schoolchildren learn?)
> ... in Perl, you've got the same expression that creates a list in one case, but not in the other...
This is still not true. The comma operator creates lists in Perl.
No, they never do. (don't know about ruby) Square brackets are for that. No problems with syntax this way.
"They also sometimes group expressions and disambiguate precedence"
But it's obvious: "expr ( [expr ,]* expr)" is a call - always. "(expr)" is for precedence. "([expr,]+)" is a tuple. Same as in 99% (made up number) of languages you encounter.
OTOH, in Perl, you've got the same expression that creates a list in one case, but not in the other, which is simply confusing. To be honest, I don't know of any other language that does it. You can call my expectations to be appropriate for a pastiche of whatever other language - yes - all the other languages I know / heard of, work the way I expected... and don't force me to learn rules that work based on context. Similarity between languages is a "good thing".
If you like that syntax, good for you. But I fully understand people who'd rather not be surprised this way. To me it doesn't make sense to be that different. I think Steve Yegge knew exactly what () do when he was writing his blog - he was simply complaining about that unexpected behaviour.