QT4CG meeting 119 draft minutes, 29 April 2025

Hi folks,

Here are the draft minutes:

   https://qt4cg.org/meeting/minutes/2025/04-29.html

QT4 CG Meeting 119 Minutes 2025-04-29

   [1]Meeting index / [2]QT4CG.org / [3]Dashboard / [4]GH Issues / [5]GH
   Pull Requests

Table of Contents

     * [6]Draft Minutes
     * [7]Summary of new and continuing actions [1/7]
     * [8]1. Administrivia
          + [9]1.1. Roll call [10/13]
          + [10]1.2. Accept the agenda
               o [11]1.2.1. Status so far...
          + [12]1.3. Approve minutes of the previous meeting
          + [13]1.4. Next meeting
          + [14]1.5. Review of open action items [5/10]
          + [15]1.6. Review of open pull requests and issues
               o [16]1.6.1. Blocked
               o [17]1.6.2. Merge without discussion
               o [18]1.6.3. Close without action
               o [19]1.6.4. Substantive PRs
     * [20]2. Technical agenda
          + [21]2.1. Review of pull requests
          + [22]2.2. PR #1883/1894: fn:chain and fn:compose
          + [23]2.3. PR #1587: 557 Add fn:unparsed-binary function
          + [24]2.4. PR #1961: Attempt to show that xsl:record allows
            extra attributes
          + [25]2.5. PR #1933: 1271 fn:xsd-validator() function
          + [26]2.6. PR #1956: 1954 (part) Private variables and functions
            don't need to be in the module namespace
     * [27]3. Any other business
     * [28]4. Adjourned

Draft Minutes

Summary of new and continuing actions [1/7]

     * [ ] QT4CG-082-02: DN to work with NW to come to agreement on the
       fn:ranks proposal
     * [ ] QT4CG-107-05: JLO and DN to consider a proposal for system
       defined records.
     * [ ] QT4CG-112-01: JLO to propose a concrete example that uses "."
       in a ~%method~s.
     * [ ] QT4CG-116-01: Add a specific error code for unsupported options
       on doc and doc-available
     * [ ] QT4CG-118-01: MK to make an incorrect type raise an error in
       #1906
     * [X] QT4CG-119-01: NW will add a bit of prose about * and then merge
       the PR 1961
     * [ ] QT4CG-119-02: MK to add a note about how schema composition is
       done for multiple options

1. Administrivia

1.1. Roll call [10/13]

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

1.2. Accept the agenda

   Proposal: Accept [29]the agenda.

   Accepted.

1.2.1. Status so far...

   These charts have been adjusted so they reflect the preceding six
   months of work.

   issues-open-2025-04-22.png

   Figure 1: "Burn down" chart on open issues

   issues-by-spec-2025-04-22.png

   Figure 2: Open issues by specification

   issues-by-type-2025-04-22.png

   Figure 3: Open issues by type

1.3. Approve minutes of the previous meeting

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

   Accepted.

1.4. Next meeting

   The next meeting is scheduled for 6 May 2025.

   JWL gives regrets.

1.5. Review of open action items [5/10]

   (Items marked [X] are believed to have been closed via email before
   this agenda was posted.)
     * [ ] QT4CG-082-02: DN to work with NW to come to agreement on the
       fn:ranks proposal
     * [ ] QT4CG-107-05: JLO and DN to consider a proposal for system
       defined records.
     * [ ] QT4CG-112-01: JLO to propose a concrete example that uses "."
       in a ~%method~s.
     * [X] QT4CG-113-02: NW to investigate a way to show extra attributes
       in the syntax summary.
     * [X] QT4CG-115-02: JWL to write a few tests for xsl:record
     * [ ] QT4CG-116-01: Add a specific error code for unsupported options
       on doc and doc-available
     * [X] QT4CG-116-03: NW to review the star/plus/delta symbols in the
       ToC. (See [31]1838)
     * [ ] QT4CG-118-01: MK to make an incorrect type raise an error in
       #1906
     * [X] QT4CG-118-02: DN to open an issue about methods in records
     * [X] QT4CG-118-03: NW to make sure compose/chain and binary are on
       the agenda for next week

1.6. Review of open pull requests and issues

   This section summarizes all of the issues and pull requests that need
   to be resolved before we can finish. See [32]Technical Agenda below for
   the focus of this meeting.

1.6.1. Blocked

   The following PRs are open but have merge conflicts or comments which
   suggest they aren't ready for action.
     * PR [33]#1942: 37 Support sequence, array, and map destructuring
       declarations
     * PR [34]#1283: 77b Update expressions
     * PR [35]#1062: 150bis revised proposal for fn:ranks

1.6.2. Merge without discussion

   The following PRs are editorial, small, or otherwise appeared to be
   uncontroversial when the agenda was prepared. The chairs propose that
   these can be merged without discussion. If you think discussion is
   necessary, please say so.
     * PR [36]#1950: 1704 Add rules/notes for BOM and related topics
     * PR [37]#1945: 1568 unicode case blind collation
     * PR [38]#1906: 1797 elements-to-maps-conversion-plan function

   Proposal: merge without discussion.

   Accepted.

1.6.3. Close without action

   It has been proposed that the following issues be closed without
   action. If you think discussion is necessary, please say so.
     * Issue [39]#1844: Drop mapping arrow operator
     * Issue [40]#1416: Key-value pairs: built-in record type `pair`
     * Issue [41]#1319: Specification Documents: Editors and Contributors

   Proposal: close without further action

   Accepted.

1.6.4. Substantive PRs

   The following substantive PRs were open when this agenda was prepared.
     * PR [42]#1961: Attempt to show that xsl:record allows extra
       attributes
     * PR [43]#1959: 1953 (part) XSLT Worked example using methods to
       implement atomic sets
     * PR [44]#1956: 1954 (part) Private variables and functions don't
       need to be in the module namespace
     * PR [45]#1933: 1271 fn:xsd-validator() function
     * PR [46]#1894: Additional examples to fn:chain - in a new branch
     * PR [47]#1888: 366 xsl:package-location
     * PR [48]#1883: 882 Replace fn:chain by fn:compose
     * PR [49]#1587: 557 Add fn:unparsed-binary function

2. Technical agenda

2.1. Review of pull requests

2.2. PR #1883/1894: fn:chain and fn:compose

   Related PRs:
     * PR [50]#1883: 882 Replace fn:chain by fn:compose
     * PR [51]#1894: Additional examples to fn:chain - in a new branch

   Discussion:
     * MK: We have two reasonably well defined functions, fn:chain and
       fn:compose. They have a lot of overlapping functionality. Do we
       want chain, or compose, or both, or neither?
          + ... I think the amount of overlap is such that we don't want
            both.
          + ... fn:chain offers two things that compose doesn't: it
            applies the function in addition to returning it.
          + ... The other thing is that it handles functions with arity
            greater than one.
     * NW: Can you use partial function application to achieve chain with
       compose?
     * JLO: Yes, I think so.
          + ... I did implement a chain like functions, and handling the
            edge cases was very complicated and had difficult error cases.
          + ... I prefer compose for this reason.
     * DN: I want to thank MK for the analysis. If we just have to vote
       for this PR, I think the question is wrong. First, it is devisive.
       This is lose-lose. (Scribe failed to capture an analogy about user
       interfaces.)

   DN shares a comment from PR 1890.
     * DN: I have translated all of the fn:compose examples into fn:chain
       examples.
          + ... The statement that there's no real difference in
            capability is obviously wrong.
          + ... The statement that you have to know a lot about the
            functions you're chaining, is equally true for fn:compose.
          + ... You can use fn:chain with dynamic functions.
          + ... The example of how to replace something that uses chain
            with compose is complicated, ugly, and error prone.
     * DN: The claim that this breaks the principle of substitutability:

if (function-arity($f) eq 1) then [ $x ]
    else if ($x instance of array(*)) then $x
    else array { $x }

     * DN: Is wrong.
     * DN: Having both functions would be redundant. Would that be bad?
     * RD: Would it make sense to have some analysis on the comparison of
       functionality between the two.
          + ... Where the functionality is the same, could we see
            side-by-side examples?
          + ... Where the functionality is different, see how those look?
          + ... And some examples of substitutibility?
     * MK: That post was my attempt to do that.
          + ... Do you return a function or also apply it? I don't think
            that's a very substantive difference.
     * RD: With returning a function you could cascade the application of
       compose or chain
     * MK: Yes. If the function applies the compose function, then you can
       do a partial application to prevent it, conversly, if it doesn't
       apply the function then you can easily apply it.
     * MK: The more substantive difference is whether you apply the
       capability of putting functions of arity greater than one into the
       chain.
          + ... That is a capability that adds some power but also adds a
            lot of complexity. My judgement in this particular case was
            that this wasn't worth it in this case.
     * DN: The convenience of chain is an important feature.
     * NW: These are functions that 1% of 1% will ever use, so convenience
       is among a small group.
     * CG: There are many languages that support fn:compose but none that
       support anything like fn:chain
          + ... DN are there any languages that support chain?
     * DN: I don't know of any, but I invented chain in response to the
       monstrous complexity of lambda functions that arose from our long
       operators.
     * BTW: I'm confused. It seems to me that MK has made a pull request
       ... shouldn't we just be discussing that.
     * MK: I'm not quite sure I'd express it that way. We do have four
       options. The intent of this PR was to express that we should have
       fn:compose instead of fn:chain, but if the will of the group is to
       go another way, we can do that.
     * JLO: There's another side effect of this PR. I think the pipeline
       operator is a better chain.
     * DN: We should be asked four questions instead of one.

   Some discussion of the status quo.
     * RD: In terms of compose, that's similar to other language features,
       it would be good to add. I'm less sure about chain.

   Straw poll:
        Option       Votes
   fn:chain (only)   0
   fn:compose (only) 6
   both              3
   neither           0

   We'll come back to this next week for a short discussion and then some
   resolution.

2.3. PR #1587: 557 Add fn:unparsed-binary function

   See PR [52]#1587
     * NW: What's left to do on this one?
     * MK: This has been dormant for a while.

   Proposal: merge this PR?

   Accepted.

2.4. PR #1961: Attempt to show that xsl:record allows extra attributes

   See PR [53]#1961
     * NW: This was my attempt to address an action.
     * MK: Looks okay to me.

   Proposal: merge this PR?

   Accepted.

   ACTION: QT4CG-119-01: NW will add a bit of prose about * and then merge
   the PR 1961

2.5. PR #1933: 1271 fn:xsd-validator() function

   See PR [54]#1933

   MK introduces the design of the new function.
     * MK: It allows you to compose the schema through any of a variety of
       components.
     * MK: If you ask for a binary answer, you don't have to have
       compatible type annotations.
     * MK: The validation function returns a map.
     * MK: Information about URIs and line and column numbers isn't in the
       data model but the implementation my be able to provide it.
     * JK: What are the rules if you populate all five of the options?
     * MK: You use them all and taken together they must provide a valid
       schema.
     * JK: It might be good to put a note in about this.

   ACTION: QT4CG-119-02: MK to add a note about how schema composition is
   done for multiple options

   Some discussion of how XML Schema defines schemas and schema
   composition.
     * JLO: Is this marked as being part of a schema aware processor?
     * MK: The F&O spec doesn't have conformance profiles. Instead, it
       says it's a dynamic error.

   Some discussion of whether this could or should be a static error
   instead.

   Proposal: merge this PR?

   Accepted.

2.6. PR #1956: 1954 (part) Private variables and functions don't need to be
in the module namespace

   See PR [55]#1956
     * MK: This removes a restriction that never seemed necessary.
          + ... It replaces it with a new rule about public names.
     * MK: This was triggered by the fact that I tried to make an example
       and I tripped over it.
     * CG: If you have variables, you don't need a namespace at all.
     * MK: Right.
     * JLO: Can I have a function called foo()? (Not in a namespace.) Can
       you now use local in libraries?
     * MK: Yes.

   Proposal: merge this PR?

   Accepted.

3. Any other business

   None heard.

4. Adjourned

References

   1. https://qt4cg.org/meeting/minutes/
   2. https://qt4cg.org/
   3. https://qt4cg.org/dashboard
   4. https://github.com/qt4cg/qtspecs/issues
   5. https://github.com/qt4cg/qtspecs/pulls
   6. https://qt4cg.org/meeting/minutes/2025/04-29.html#minutes
   7. https://qt4cg.org/meeting/minutes/2025/04-29.html#new-actions
   8. https://qt4cg.org/meeting/minutes/2025/04-29.html#administrivia
   9. https://qt4cg.org/meeting/minutes/2025/04-29.html#roll-call
  10. https://qt4cg.org/meeting/minutes/2025/04-29.html#agenda
  11. https://qt4cg.org/meeting/minutes/2025/04-29.html#so-far
  12. https://qt4cg.org/meeting/minutes/2025/04-29.html#approve-minutes
  13. https://qt4cg.org/meeting/minutes/2025/04-29.html#next-meeting
  14. https://qt4cg.org/meeting/minutes/2025/04-29.html#open-actions
  15. https://qt4cg.org/meeting/minutes/2025/04-29.html#open-pull-requests
  16. https://qt4cg.org/meeting/minutes/2025/04-29.html#blocked
  17. https://qt4cg.org/meeting/minutes/2025/04-29.html#merge-without-discussion
  18. https://qt4cg.org/meeting/minutes/2025/04-29.html#close-without-action
  19. https://qt4cg.org/meeting/minutes/2025/04-29.html#substantive
  20. https://qt4cg.org/meeting/minutes/2025/04-29.html#technical-agenda
  21. https://qt4cg.org/meeting/minutes/2025/04-29.html#technical-prs
  22. https://qt4cg.org/meeting/minutes/2025/04-29.html#h-92337C4E-B551-4176-894D-E6A787B9E12D
  23. https://qt4cg.org/meeting/minutes/2025/04-29.html#h-B25410B2-D4A6-4B55-AA44-77E8AA6C14C9
  24. https://qt4cg.org/meeting/minutes/2025/04-29.html#h-FE13E29E-5866-4DB5-AC9F-5B0CE37301FC
  25. https://qt4cg.org/meeting/minutes/2025/04-29.html#h-939C55CA-BED8-44BF-A411-57FDCD93ABE6
  26. https://qt4cg.org/meeting/minutes/2025/04-29.html#h-2CEE8E12-133A-47BB-80AC-EBAD41C0B383
  27. https://qt4cg.org/meeting/minutes/2025/04-29.html#any-other-business
  28. https://qt4cg.org/meeting/minutes/2025/04-29.html#adjourned
  29. https://qt4cg.org/meeting/agenda/2025/04-29.html
  30. https://qt4cg.org/meeting/minutes/2025/04-22.html
  31. https://github.com/qt4cg/qtspecs/pull/1838#issuecomment-2682372207
  32. https://qt4cg.org/meeting/minutes/2025/04-29.html#technical-agenda
  33. https://qt4cg.org/dashboard/#pr-1942
  34. https://qt4cg.org/dashboard/#pr-1283
  35. https://qt4cg.org/dashboard/#pr-1062
  36. https://qt4cg.org/dashboard/#pr-1950
  37. https://qt4cg.org/dashboard/#pr-1945
  38. https://qt4cg.org/dashboard/#pr-1906
  39. https://github.com/qt4cg/qtspecs/issues/1844
  40. https://github.com/qt4cg/qtspecs/issues/1416
  41. https://github.com/qt4cg/qtspecs/issues/1319
  42. https://qt4cg.org/dashboard/#pr-1961
  43. https://qt4cg.org/dashboard/#pr-1959
  44. https://qt4cg.org/dashboard/#pr-1956
  45. https://qt4cg.org/dashboard/#pr-1933
  46. https://qt4cg.org/dashboard/#pr-1894
  47. https://qt4cg.org/dashboard/#pr-1888
  48. https://qt4cg.org/dashboard/#pr-1883
  49. https://qt4cg.org/dashboard/#pr-1587
  50. https://qt4cg.org/dashboard/#pr-1883
  51. https://qt4cg.org/dashboard/#pr-1894
  52. https://qt4cg.org/dashboard/#pr-1587
  53. https://qt4cg.org/dashboard/#pr-1961
  54. https://qt4cg.org/dashboard/#pr-1933
  55. https://qt4cg.org/dashboard/#pr-1956

                                        Be seeing you,
                                          norm

--
Norm Tovey-Walsh
Saxonica

Received on Tuesday, 29 April 2025 16:38:35 UTC