|| ||Guido van Rossum <guido-+ZN9ApsXKcEdnm+yROfE0A-AT-public.gmane.org> |
|| ||Antoine Pitrou <solipsis-xNDA5Wrcr86sTnJN9+BGXg-AT-public.gmane.org> |
|| ||Re: Implicit string literal concatenation considered
|| ||Fri, 10 May 2013 12:30:15 -0700|
|| ||Article, Thread
On Fri, May 10, 2013 at 12:16 PM, Antoine Pitrou <solipsis-xNDA5Wrcr86sTnJN9+BGXg@public.gmane.org>
> On Fri, 10 May 2013 11:48:51 -0700
> Guido van Rossum <guido-+ZN9ApsXKcEdnm+yROfE0A@public.gmane.org> wrote:
>> I just spent a few minutes staring at a bug caused by a missing comma
>> -- I got a mysterious argument count error because instead of foo('a',
>> 'b') I had written foo('a' 'b').
>> This is a fairly common mistake, and IIRC at Google we even had a lint
>> rule against this (there was also a Python dialect used for some
>> specific purpose where this was explicitly forbidden).
>> Now, with modern compiler technology, we can (and in fact do) evaluate
>> compile-time string literal concatenation with the '+' operator, so
>> there's really no reason to support 'a' 'b' any more. (The reason was
>> always rather flimsy; I copied it from C but the reason why it's
>> needed there doesn't really apply to Python, as it is mostly useful
>> inside macros.)
>> Would it be reasonable to start deprecating this and eventually remove
>> it from the language?
> I'm rather -1. It's quite convenient and I don't want to add some '+'
> signs everywhere I use it. I'm sure many people also have long string
> literals out there and will have to endure the pain of a dull task to
> "fix" their code.
Fixing this is an easy task for lib2to3 though.
I think the "convenience" argument doesn't cut it -- if Python didn't
have it, can you imagine it being added? It would never make it past
all the examples of code broken by missing commas.
> However, in your case, foo('a' 'b') could raise a SyntaxWarning, since
> the "continuation" is on the same line.
There are plenty of examples where the continuation isn't on the same
line (some were already posted here).
--Guido van Rossum (python.org/~guido)
to post comments)