QT4CG meeting 085 draft minutes, 9 July 2024

Hello,

Here are the minutes from today’s meeting.

   https://qt4cg.org/meeting/minutes/2024/07-09.html

For next week, please spend some time considering how we might reach consensus on PR 1296. As MK observed, motivational examples would be especially welcome.

QT4 CG Meeting 085 Minutes 2024-07-09

Table of Contents

     * [1]Draft Minutes
     * [2]Summary of new and continuing actions [0/3]
     * [3]1. Administrivia
          + [4]1.1. Roll call [11/12]
          + [5]1.2. Accept the agenda
               o [6]1.2.1. Status so far...
          + [7]1.3. Approve minutes of the previous meeting
          + [8]1.4. Next meeting
          + [9]1.5. Review of open action items [0/3]
          + [10]1.6. Review of open pull requests and issues
               o [11]1.6.1. Blocked
               o [12]1.6.2. Substantive PRs
     * [13]2. Technical Agenda
          + [14]2.1. PR #1313: 1311 Tokenizing after <
          + [15]2.2. PR #1266: 1158 Add array mapping operator
          + [16]2.3. PR #1262: 1160 Add collation-available() function
          + [17]2.4. PR #1306: 46 Add @as attribute to xsl:sequence
          + [18]2.5. PR #1296: 982 Rewrite of scan-left and scan-right
     * [19]3. Any other business
     * [20]4. Adjourned

   [21]Meeting index / [22]QT4CG.org / [23]Dashboard / [24]GH Issues /
   [25]GH Pull Requests

Draft Minutes

Summary of new and continuing actions [0/3]

     * [ ] QT4CG-080-05: NW to add absolute property to the parse-uri
       output
     * [ ] QT4CG-080-07: NW to update the build instructions in the README
     * [ ] QT4CG-082-02: DN to work with MK to come to agreement on the
       fn:ranks proposal

1. Administrivia

1.1. Roll call [11/12]

   Regrets: RD
     * [ ] Reece Dunn (RD)
     * [X] Sasha Firsov (SF)
     * [X] Christian Gr¸n (CG)
     * [X] Joel Kalvesmaki (JK)
     * [X] Michael Kay (MK)
     * [X] Juri Leino (JLO)
     * [X] John Lumley (JWL)
     * [X] Dimitre Novatchev (DN)
     * [X] Wendell Piez (WP)
     * [X] Ed Porter (EP)
     * [X] C. M. Sperberg-McQueen (MSM)
     * [X] Norm Tovey-Walsh (NW). Scribe. Chair.

1.2. Accept the agenda

   Proposal: Accept [26]the agenda.

   Accepted.

1.2.1. Status so far...

   issues-open-2024-07-09.png

   Figure 1: "Burn down" chart on open issues

   issues-by-spec-2024-07-09.png

   Figure 2: Open issues by specification

   issues-by-type-2024-07-09.png

   Figure 3: Open issues by type

1.3. Approve minutes of the previous meeting

   Proposal: Accept [27]the minutes of the previous meeting.

   Accepted.

1.4. Next meeting

   This next meeting is planned for 16 July.

   Any regrets?

   None heard.

1.5. Review of open action items [0/3]

     * [ ] QT4CG-080-05: NW to add absolute property to the parse-uri
       output
     * [ ] QT4CG-080-07: NW to update the build instructions in the README
     * [ ] QT4CG-082-02: DN to work with MK to come to agreement on the
       fn:ranks proposal

1.6. Review of open pull requests and issues

1.6.1. Blocked

   The following PRs are open but have merge conflicts or comments which
   suggest they aren't ready for action.
     * PR [28]#1231: 1193 Parsing Functions: Empty input
     * PR [29]#1227: 150 PR resubmission for fn ranks
     * PR [30]#1062: 150bis - revised proposal for fn:ranks
     * PR [31]#529: 528 fn:elements-to-maps

1.6.2. Substantive PRs

   The following substantive PRs were open when this agenda was prepared.
     * PR [32]#1313: 1311 Tokenizing after <
     * PR [33]#1306: 46 Add @as attribute to xsl:sequence
     * PR [34]#1296: 982 Rewrite of scan-left and scan-right
     * PR [35]#1283: 77b: Update expressions
     * PR [36]#1266: 1158 Add array mapping operator
     * PR [37]#1263: 1224 Add xsl:accumulator-rule/@priority attribute
     * PR [38]#1262: 1160 Add collation-available() function
     * PR [39]#1244: 566-partial Rewrite parse-uri
     * PR [40]#1228: - Adding the BLAKE3 hashing algorithm to fn:hash
     * PR [41]#1209: 1183 Add transient mode and the transient{}
       expression
     * PR [42]#1185: 1179 array:values, map:values -> array:get, map:get
     * PR [43]#832: 77 Lookup returning path selection

2. Technical Agenda

2.1. PR #1313: 1311 Tokenizing after <

   See PR [44]#1313

   MK introduces the issue. The substantive changes are in the grammar
   appendix.
     * MK: Some of the rules need to be clarified as they depend on how
       you interpreted some of the rules in 3.1
          + ... I've tried to describe carefully what a tokenizer should
            do.
          + (MK walks through the various cases.)
          + ... A name character after a "<" is a bit tricky.
          + ... This is done without appeal to the context.
          + ... There's a note about compatibility and the infamous 10
            div-3 example.
          + ... The longest token rule has previously required you to know
            the context; we've abandoned that.
     * NW: I've checked the diff and it looks clean despite the weirdness
       in the diff version.
     * JWL: Is it worth noting that these rules don't apply to the
       full-width "<" character?
     * MK: Maybe, but we'd be in danger of repeating ourselves.
     * JLO: Why can't we enforce a space after the "<"?
     * MK: Compatibility.
     * JLO: But isn't it also incompatible to require the space after div?
     * MK: You've always been able to write price<discount without a space
       (where they are both element names).
          + ... The other problem would be that it would impose a
            constraint on XPath users that only applies to XQuery.
     * DN: I think in the past I've observed that we have trouble because
       we have so many operators. My reaction to this was the chain
       function which doesn't require any operator at all.
          + ... I think this problem is artificial. It's artificially
            raised by the over-abundance of operators.

   (Some discussion of the fact that the problem is associated with "<"
   and not the abundance of operators.)
     * MSM: I disagree with DN only in one respect, I think the problem
       was clear 20 years ago!
          + ... Every simplifaction is welcome to me. MK says you've
            always been able to write a<b without spaces in XPath when a
            and b are element names. But you also said that not everyone
            parses the same way. Do we have emperical evidence that
            everyone does that bit correctly?
     * MK: The div-3 issue is certainly a very problematic case that we've
       know about for years. And the spec is notoriously vague on that
       one. There's never been any rule in XPath that you need spaces
       around a "<" sign and I think it's unlikely that any implementation
       has imposed that rule. If they do, they're pretty clearly wrong.

   Proposal: accept this PR.

   Accepted.

2.2. PR #1266: 1158 Add array mapping operator

   See PR [45]#1266
     * MK: This introduces another bit of syntactic magic, but it's
       justified by the fact that the sequence mapping operator has proved
       very popular. This makes it possible to do with arrays what you can
       do with sequences.
          + ... The !! operator is introduced to map arrays.
     * DN: Continuing what I said previously: not only is this difficult
       to write and understand, it's very error prone. Suppose I write "!"
       when I wanted "!!" or vice-versa. The possibility of making
       mistakes makes this unacceptable.
          + ... Maybe I'd expect "!!!" and "!!!!" in the future!
     * MK: Yes, I fully accept that the argument that we're adding too
       many rather cryptic operators. At the same time, on balance I think
       it's better to have this one than not have it.
     * CG: What I can report from our users is that there are two groups
       of people: some like a concise syntax and welcome new operators of
       that kind. And others are already lost from other extensions. You
       can always say "don't use it if you don't like it." But I think
       we've already agreed to address expert users with new constructs.
     * JWL: Just to clarify, if the left hand part was a sequence of
       arrays, would I use "!" and then "!!"?
     * MK: I restricted the left hand side to be an empty sequence or a
       single array.
     * JWL: Yes, but you could map over a sequence of arrays with a double
       mapping.
     * MK: Yes, and at that point you're probably better of with FLOWR
       expressions.
     * JK: Could this also be applied and leveraged for maps? If we
       consider an array just a map with numeric keys, you could apply
       this to the values of a map.
     * MK: Worth exploring, but I thought that would be too complicated
       and not really needed.
     * MSM: Thank you, CG, for putting it the way he did. He's made me
       think it in a slightly different way. When I used to teach XPath to
       beginners, I always told users not to use the abbreviated syntax
       until it was boring. I feel much the same way about FLOWR
       expressions. That leads me to a concrete suggestion: you could do
       this with a FLOWR expression and I think it would be useful if the
       introduction of the operator gave an equivalent FLOWR expression.
     * MK: Yes, you can define how you'd solve the problem with a FLOWR
       expression, but you can show an equivalent expression because we
       don't have a way to bind the context value.
     * MSM: Give an example and maybe point out the crucial difference.
     * JLO: I learned from a previous comment that if there's a sequence
       of arrays you'd really need to do ! . !!?
     * MK: I think if you had a sequence of arrays, a compound FLOWR
       expression would be better.
     * JLO: We have "/", "//", and "?" and "??", and... In that regard it
       would make sense to me if a sequence of arrays would be mapped with
       "!!". Would that make sense?
     * MK: It could be done that way. On the whole we've gone against
       operators that do implicit mapping over sequences. I've tried to
       keep it simple for the moment.
     * CG: It's really difficult to find other operators/characters that
       are more intuitive. I wouldn't have guessed that "!!" had anything
       to do with arrays.
     * MK: Yes. Choosing punctuation symbols is always a little arbitrary.
       Sometimes they have mnemonic value and sometimes they don't.
     * CG: We don't have any other use of "!" with arrays.
     * MK: I think the mnemonic is that it's an extension of the "!"
       operator.
     * JWL: I think JLO's idea has some merit. It would allow the left
       hand side to be an empty sequence.
     * MK: That's already allowed. I decided to handle that case but not
       multiple arrays.
     * WP: I'm not sure I have all the context. There's a two level
       problem, we want to solve the problem but at a lower level we have
       the observations that DN has made. Documenting it as MSM suggests
       seems like a good idea. I'd be more comfortable with DN's comments
       if we knew what the boundaries are. I like the feature, but I see
       the issues DN is raising.
     * MK: It's a classic feature creep problem. It's always possible to
       add "one more feature" and then you discover you've added 500.
     * WP: This is a feature requested by users?
     * MK: It fulfills an obvious gap.
     * WP: It's accounting for completeness. That's a balancing factor
       against simplicity.
     * MK: There's an orthogonality argument: if a feature exists for
       sequences, it should exist for arrays.
     * DN: Several things. I think that for many of our creations, we need
       to remember "KISS": keep it simple stupid. The fact that we're out
       of special characters and we need repetitions, should ring a bell
       to tell us to stop creating new operators! I think CG said expert
       user like this notation, but I'm not sure I'm convinced. I don't
       consider myself a novice user, but I don't like it. When I write
       new courses for XPath 4.0, I will definitely tell users to avoid
       these operators and especially long chains of them.
          + ... I can't over-emphasize my frustration with this issue.
     * SF: One argument against the simplicity argument: languages tend to
       have at most 128 phonemes. That seems to be a limiting factor of
       human cogition. The idea that we should keep the operators simple
       flies in the face of the limitations of ASCII. This is a chaining
       operator and we need to keep the semantics understandable.
     * DN: Regarding what SF said, I largely agree. But also, we're not
       linguists, from a historical perspective: what were the operators.
       Very few gestures were preserved, most things were replaced by
       meaningful words.
     * SF: If we're concerned about multiple characters. We could use
       Unicode. I'd be in favor of a dual approach were we have single
       Unicode characters and ASCII representation.
     * JLO: I like the idea of this mapping, but I'd really like to see it
       made to traverse over lists. Extending ! and !! along the lines of
       / or //. I never heard anyone say it wouldn't be possible.
     * NW: We have one person strongly opposed and when I asked for
       support, I got a luke-warm response at best.

   NW: I don't believe we have consensus to add this.

2.3. PR #1262: 1160 Add collation-available() function

   See PR [46]#1262
     * MK: Not much has changed. You can now specify multiple usages, and
       it must be available for all the usages.

   Proposal: accept this PR.

   Accepted.

2.4. PR #1306: 46 Add @as attribute to xsl:sequence

   See PR [47]#1306
     * MK: The previous version added an xsl:item instruction. That was
       controversial, so this removes the xsl:item instruciton. That will
       return in another PR.
     * JWL: Last time there was also a notion of putting as on any
       instruction. That doesn't make sense everywhere.

   Proposal: accept this PR.

   Accepted.

2.5. PR #1296: 982 Rewrite of scan-left and scan-right

   See PR [48]#1296

   Are we ready for this? Let's give it a try...
     * MK: We've reviewed this before and gone back and forth a bit.
          + ... We had an example in our own spec where we used position
            arguments.
          + ... We left fold-left and fold-right the same, what's changed
            is the way it's described.
          + ... The arity-2 call back is fairly straightforward
          + ... The description of the arity-3 call back is much simpler.
          + ... We do roughly the same thing for fold-left and fold-right
     * MK: The description of scan-left and scan-right uses the same
       mechanism. That improves the exposition.
     * DN: I see here at least two problems. Folds as they were originally
       defined never had any positional arguments for the action function.
       This is because aggregation as a whole doesn't depend on position.
       None of the common uses for folds have any use for position. I did
       a lot of research and only found one use of a positional argument
       in a JavaScript implementation and it was a contrived example.
          + ... Now we have another contrived example in our own
            specification.
          + ... Using the rule that allows a function to be passed with
            too many arguments totally destroys type safety.
     * DN: A position argument shouldn't be used and the rule that you can
       pass extra arguments destroys type safety. I don't believe this use
       of a position will ever be used more times than I have fingers!
     * DN: We should reconsider positional arguments and this rule about
       passing additional arguments that are ignored.
          + ... The proposed solution is to specify a new function if you
            want a positional argument!
     * DN: Initially the specification was executable, but now it's
       replaced by code that isn't executable. We have examples in our
       specification of code with errors.
     * JWL: I noticed the for-each function; is there an argument for
       symmetry there.
     * MK: I think it already has one! That's part of the motivation for
       this.
     * CG: I can report that users are already thankful that we added
       position to for-each. I think it's a good idea because so many
       people know it from JavaScript. It's always interesting to know
       what position your at in a sequence. It's pointless to say that for
       folds positions don't make sense.
     * JLO: Since it was questioned why one would need a positional
       argument in a fold, I'd like to see windowed flower statmenets
       expressed in a functional way and I think this is part of the way.
     * MK: I think some persuasive use cases would help.
     * DN: I wanted to remind everyone that blinding following uniformity
       is bad.

   We've run out of time and this has been a somewhat contentious issue.
   Let's try to carry on the discussion in email and come back to this
   next week.

3. Any other business

   None heard.

4. Adjourned

References

   1. https://qt4cg.org/meeting/minutes/2024/07-09.html#minutes
   2. https://qt4cg.org/meeting/minutes/2024/07-09.html#new-actions
   3. https://qt4cg.org/meeting/minutes/2024/07-09.html#administrivia
   4. https://qt4cg.org/meeting/minutes/2024/07-09.html#roll-call
   5. https://qt4cg.org/meeting/minutes/2024/07-09.html#agenda
   6. https://qt4cg.org/meeting/minutes/2024/07-09.html#so-far
   7. https://qt4cg.org/meeting/minutes/2024/07-09.html#approve-minutes
   8. https://qt4cg.org/meeting/minutes/2024/07-09.html#next-meeting
   9. https://qt4cg.org/meeting/minutes/2024/07-09.html#open-actions
  10. https://qt4cg.org/meeting/minutes/2024/07-09.html#open-pull-requests
  11. https://qt4cg.org/meeting/minutes/2024/07-09.html#blocked
  12. https://qt4cg.org/meeting/minutes/2024/07-09.html#substantive
  13. https://qt4cg.org/meeting/minutes/2024/07-09.html#technical-agenda
  14. https://qt4cg.org/meeting/minutes/2024/07-09.html#pr-1313
  15. https://qt4cg.org/meeting/minutes/2024/07-09.html#pr-1266
  16. https://qt4cg.org/meeting/minutes/2024/07-09.html#pr-1262
  17. https://qt4cg.org/meeting/minutes/2024/07-09.html#pr-1306
  18. https://qt4cg.org/meeting/minutes/2024/07-09.html#pr-1296
  19. https://qt4cg.org/meeting/minutes/2024/07-09.html#any-other-business
  20. https://qt4cg.org/meeting/minutes/2024/07-09.html#adjourned
  21. https://qt4cg.org/meeting/minutes/
  22. https://qt4cg.org/
  23. https://qt4cg.org/dashboard
  24. https://github.com/qt4cg/qtspecs/issues
  25. https://github.com/qt4cg/qtspecs/pulls
  26. https://qt4cg.org/meeting/agenda/2024/07-09.html
  27. https://qt4cg.org/meeting/minutes/2024/07-02.html
  28. https://qt4cg.org/dashboard/#pr-1231
  29. https://qt4cg.org/dashboard/#pr-1227
  30. https://qt4cg.org/dashboard/#pr-1062
  31. https://qt4cg.org/dashboard/#pr-529
  32. https://qt4cg.org/dashboard/#pr-1313
  33. https://qt4cg.org/dashboard/#pr-1306
  34. https://qt4cg.org/dashboard/#pr-1296
  35. https://qt4cg.org/dashboard/#pr-1283
  36. https://qt4cg.org/dashboard/#pr-1266
  37. https://qt4cg.org/dashboard/#pr-1263
  38. https://qt4cg.org/dashboard/#pr-1262
  39. https://qt4cg.org/dashboard/#pr-1244
  40. https://qt4cg.org/dashboard/#pr-1228
  41. https://qt4cg.org/dashboard/#pr-1209
  42. https://qt4cg.org/dashboard/#pr-1185
  43. https://qt4cg.org/dashboard/#pr-832
  44. https://qt4cg.org/dashboard/#pr-1313
  45. https://qt4cg.org/dashboard/#pr-1266
  46. https://qt4cg.org/dashboard/#pr-1262
  47. https://qt4cg.org/dashboard/#pr-1306
  48. https://qt4cg.org/dashboard/#pr-1296

                                        Be seeing you,
                                          norm

--
Norm Tovey-Walsh
Saxonica

Received on Tuesday, 9 July 2024 16:23:50 UTC