[Python-ideas] Dart like multi line strings identation
Richard Damon
Richard at Damon-Family.org
Sun Apr 1 15:42:18 EDT 2018
On 4/1/18 8:36 AM, Steven D'Aprano wrote:
> On Sun, Apr 01, 2018 at 08:08:41AM -0400, Richard Damon wrote:
>
>> One comment about the 'combitorial explosion' is that it sort of assumes
>> that each individual combination case needs to be handled with distinct
>> code.
> No -- as I said in an earlier post, Terry and I (and Eric) are talking
> about the explosion in number of prefixes, not the complexity of the
> code.
>
> You are right that many of the prefixes can be handled by the same code:
>
> rfd rfD rFd rFD rdf rdF rDf rDF
> Rfd RfD RFd RFD Rdf RdF RDf RDF
> frd frD fRd fRD fdr fdR fDr fDR
> Frd FrD FRd FRD Fdr FdR FDr FDR
> drf drF dRf dRF dfr dfR dFr dFR
> Drf DrF DRf DRF Dfr DfR DFr DFR
> # why did we support all these combinations? who uses them?
>
> presumably will all handled by the same "raw dedent f-string" code. But
> the parser still has to handle all those cases, and so does the person
> reading the code.
>
> And that *mental complexity* is (in my opinion) the biggest issue with
> adding a new d-prefix, and why I would rather make it a method.
>
> Another big advantage of a method is that we can apply it to
> non-literals too.
>
> The number of code paths increases too, but not anywhere as fast:
>
> # existing
> - regular ("cooked") triple-quoted string;
> - raw string;
> - f-string
> - raw f-string
>
> # proposed additions
> - dedent string
> - raw dedent string
> - dedent f-string
> - raw dedent f-string
>
> so roughly doubling the number of cases. I doubt that will double the
> code complexity, but it will complicate it somewhat.
>
> Apart from parsing, the actual complexity to the code will probably be
> similar whether it is a method or a prefix. After all, whichever we do,
> we still need built-in dedent code.
>
>
I think you miss my point that we shouldn't be parsing by each
combination of prefixes (even collapsing equivalent ones), and instead
by each prefix adjusting the rules for parse, which a single parsing
routine uses. Mentally, you should be doing the same. I think that the
grammar trying to exhaustively list the prefixes is awkward, and would
be better served by a simpler production that allows for an arbitrary
combination of the prefixes combined with a rule properly limiting the
combinations of letters allowed, something like: one one of a give
letter (case insensitive), at most one of b, u, and f, at most one of r
and u (for python 3), then followed like currently with a description of
what each letter does. This removes the combitorial explosion that is
already starting with the addition of f.
--
Richard Damon
More information about the Python-ideas
mailing list