[ghc-steering-committee] Proposal #569: multiline string literals; Rec: accept

Arnaud Spiwack arnaud.spiwack at tweag.io
Wed Jan 10 14:14:58 UTC 2024


In favour.

Turning all the tabs among the leading whitespaces (rather than, say, just
the tabs that get “broken” by leading space removal) is rather
idiosyncratic. But if you absolutely need tabs at the beginning of your
string you can `\t` (in fact, if it's important, you probably want to do so
as it communicates intent much more explicitly). Apart from that, I feel
that the proposal generally matches intuition (there's no perfect way to do
multiline string anyway).

For the delimiter, there are several alternatives proposed (including
having all """+ as delimiters, which would allow fewer escape in case you
need """ in your string, this one has the benefit of being backward
compatible with the current """). Ocaml has a nice alternative: {id|…|id}
(the identifier can be empty). Any character besides |id} continue the
string (Ocaml doesn't do any sort of leading space trimming with this sort
of strings, but it's besides the point). Should we add this in the
alternatives section?

On Wed, 3 Jan 2024 at 14:13, Simon Peyton Jones <simon.peytonjones at gmail.com>
wrote:

> But there is! Code review, for the user manual entry.
>
>
> I just think that often will not happen.
>
> I am also genuinely unclear about what the spec *is*.   I see no downside,
> and significant upside, in resolving that now rather than kicking it down
> the road.   I have read the proposal.  I have it paged in.  I don't want to
> repeat that process in three weeks, or three months, or three years.
>
> If the author wants to write a user manual entry and put that as the
> "proposed change spec" that would be fine with me.  I'm not asking for
> duplicated effort.
>
> Simon
>
> On Wed, 3 Jan 2024 at 13:05, Richard Eisenberg <rae at richarde.dev> wrote:
>
>>
>>
>> On Jan 3, 2024, at 7:56 AM, Simon Peyton Jones <
>> simon.peytonjones at gmail.com> wrote:
>>
>> If there is a consensus to accept, we can say "Accept provided you make
>> the spec precise, and that process does not throw up any unexpected
>> surprises".  I agree that requiring a fully-precise spec for a
>> subsequently-rejected proposal is dispiriting.
>>
>> But I worry that if we kick the can down the road
>>
>>    - there is no mechanism to ensure subsequent precision
>>
>> But there is! Code review, for the user manual entry.
>>
>>
>>    - code reviewers have no spec wrt which to review the code
>>
>> This can be problematic -- but reviewers should then insist that the
>> manual entry is precise so that they can review the code.
>>
>> so maybe it never gets done at all.
>>
>> Simon
>>
>> On Wed, 3 Jan 2024 at 12:52, Richard Eisenberg <rae at richarde.dev> wrote:
>>
>>>
>>>
>>> On Jan 3, 2024, at 7:47 AM, Simon Peyton Jones <
>>> simon.peytonjones at gmail.com> wrote:
>>>
>>> But why wait?
>>>
>>>
>>> To reduce the burden of the proposal process. From the point of view of
>>> the proposer, putting yet more time into an as-yet-unaccepted proposal is a
>>> hoop to jump through, with uncertain outcome.
>>>
>>> As we can observe, writing precise specifications is generally not easy.
>>> (If it were easy, then we should expect most proposals to come with one.
>>> But almost all proposals are insufficiently precise upon inspection.) I'm
>>> just trying to nudge us toward making the process easier (for us, too!).
>>>
>>> Richard
>>>
>>>
>>> There is no implementation-related uncertainty here.  It's just a
>>> question of writing a precise spec.  It's not even difficult to do!
>>>
>>> Sometimes making the spec precise throws up unexpected wrinkles.
>>>
>>> I'm not against postponing things where the implementation may influence
>>> details of the spec.  But that's not the case here, I think.
>>>
>>> Simon
>>>
>>> On Wed, 3 Jan 2024 at 12:43, Richard Eisenberg <rae at richarde.dev> wrote:
>>>
>>>> I agree that some aspects of this proposal are not as precise as I'd
>>>> like. But actually I think we should accept before these last few details
>>>> are worked out. Unless I'm mistaken, there's not a worry that the specific
>>>> choices will change our minds, and the details will have to be resolved in
>>>> the course of implementation. Ideally, the proposer will come back and
>>>> update the proposal. However, the proposal is not the long-lasting record
>>>> of the specification; the user manual is. (By contrast, the proposal is the
>>>> long-lasting record of the motivation / discussion / alternatives.) So I
>>>> would insist in the code-review process that the manual is fully precise,
>>>> and perhaps to insist that the proposal has a note saying it will be made
>>>> precise in the course of implementation -- but I don't think we need this
>>>> to happen before acceptance. Sometimes the details are easier to work out
>>>> during implementation and can be informed by the tiny bit of experience
>>>> gained writing tests, etc.
>>>>
>>>> Richard
>>>>
>>>> PS: The viewpoint here -- to work out final details late -- is informed
>>>> by the common practice at Jane Street. We sketch out a broad idea with a
>>>> bunch of examples, but we write down the final specification only after
>>>> implementing. This is so much easier, because it makes the specification
>>>> process iterative with implementation.
>>>>
>>>> On Jan 3, 2024, at 7:17 AM, Simon Peyton Jones <
>>>> simon.peytonjones at gmail.com> wrote:
>>>>
>>>> I'm content to accept, but only when the specification is made precise.
>>>>
>>>> Simon
>>>>
>>>> On Tue, 2 Jan 2024 at 12:24, Richard Eisenberg <rae at richarde.dev>
>>>> wrote:
>>>>
>>>>> After some conversation on the ticket, I'd like to vote for acceptance
>>>>> here.
>>>>>
>>>>> Richard
>>>>>
>>>>> > On Jan 1, 2024, at 9:46 AM, Richard Eisenberg <rae at richarde.dev>
>>>>> wrote:
>>>>> >
>>>>> > Yes that's true of course, but if we had a design that could cover
>>>>> raw strings as well, then we have one fewer quoting construct. I guess the
>>>>> real question is: do we need the ability to toggle between multiline and
>>>>> raw separately? That is, right now we have cooked single-line strings. This
>>>>> proposal is for cooked multiline strings, leaving raw strings for a
>>>>> separate proposal. But maybe we only need cooked single-line strings and
>>>>> raw multiline ones? That would be simpler.
>>>>> >
>>>>> > I think wisdom from other languages would be helpful here. I will
>>>>> post on the ticket.
>>>>> >
>>>>> > Richard
>>>>> >
>>>>> >> On Dec 31, 2023, at 12:04 PM, Eric Seidel <eric at seidel.io> wrote:
>>>>> >>
>>>>> >>
>>>>> >>> On Dec 29, 2023, at 07:19, Richard Eisenberg <rae at richarde.dev>
>>>>> wrote:
>>>>> >>>
>>>>> >>> On the other hand, I'm a little worried that this doesn't have
>>>>> support for raw strings. That is, even with this, there will still be some
>>>>> users who reach for quasiquotes for multi-line strings, if those strings
>>>>> contain backslashes.
>>>>> >>
>>>>> >> I had a similar thought at first, but I think raw strings can be
>>>>> added independently of this proposal. So long as we are not closing the
>>>>> door to a future addition I think it is fine to take incremental steps.
>>>>> >
>>>>>
>>>>> _______________________________________________
>>>>> ghc-steering-committee mailing list
>>>>> ghc-steering-committee at haskell.org
>>>>>
>>>>> https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-steering-committee
>>>>>
>>>>
>>>>
>>>
>> _______________________________________________
> ghc-steering-committee mailing list
> ghc-steering-committee at haskell.org
> https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-steering-committee
>


-- 
Arnaud Spiwack
Director, Research at https://moduscreate.com and https://tweag.io.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-steering-committee/attachments/20240110/488a46d4/attachment.html>


More information about the ghc-steering-committee mailing list