Minutes of ARG Meeting 63H 19 March 2025 Attendees: Steve Baird, Randy Brukardt, Jeff Cousins, Gary Dismukes, Bob Duff, Christoph Grein, Niklas Holsti, Brad Moore, Alejandro Mosteo (joined 11:00), Jean-Pierre Rosen, Tucker Taft, Tullio Vardanega, Richard Wai. Observers: Robin Leroy (Unicode liaison), Liam Arabsky (Canada) Meeting Summary The meeting convened on Wednesday, 19 March 2025 at 10:38 hours EDT and adjourned at 13:27 hours EDT. The meeting was held using Zoom. The meeting covered some of the new and updated AIs on the agenda. AI Summary The following AIs were approved: AI22-0126-1/01 Finalization order of temporary objects (13-0-0) AI22-0127-1/02 Elaborate_Body is a library unit aspect (13-0-0) AI22-0128-1/01 Evaluation of Relative_Deadline aspect (13-0-0) The following AIs were approved with editorial changes: AI22-0101-1/08 Valid_Scalars attribute is defined (12-0-1) AI22-0123-1/05 Type of aggregates and raise expressions (11-0-2) AI22-0130-1/01 Bounded Queues Capacity (13-0-0) The intentions of the following AIs were approved but they require a rewrite: AI22-0129-1/01 Usage example for protected type with dynamic predicate (13-0-0) The following AIs were discussed and assigned to an editor: AI22-0119-1/03 Canonical order should be defined once and only referenced later Detailed Minutes Welcome Steve welcomes everyone to this meeting. Apologies No apologies were reported. Previous Meeting Minutes There were no comments on the minutes: Approve minutes: 12-0-0. Date and Venue of the Next Meeting Our next electronic meeting is proposed for Wednesday, May 28. Tucker says he can’t come on Thursday (if we need to look for another date). Christoph notes that he will be traveling the entirety of May, so he cannot make any date. Jeff says that he will be late on the Wednesday date. But there are no major problems with the proposed date, so we accept that. So the next meeting will be Wednesday, May 28 with the usual time (10:30-13:30 EDT [-5 UTC]) and method (Zoom). Format Updates on older AIs Randy reports that he has started permanently reformatting the AIs that were originally formatted in plain text to HTML, using a tool based on the on-line AI formatter. He is hand correcting any mistakes that the formatter makes (as there are not a large number of these AIs, and this is a one-time task, the time to get the tool to work better would probably be greater than simply fixing the mistakes). He’s made it up through AI22-0019-1 at this time. He is then reconstructing the CVS archives with the same contents (just now in HTML), so the effect should not be noticeable except for more consistently formatted AIs. He also has been updating the minutes as needed to point to the appropriate file and version. The latest posted RM/AARM also has updated links. Users that are purely on-line shouldn’t notice any difference, but if you have downloaded an Ada 2y document, it probably will work better if refreshed with a current copy. ARG Procedure Updates Randy explains the changes. Mostly, these are to support the voting rights additions that we had discussed on-line. Tucker asks if this wording needs to reflect the addition of the !assigned author header. Randy thinks not, as we want these rules to be relatively bare-bones rules in order to allow for future flexibility. Our current intent is reflected in the discussion document, which will remain available on the Google ARG website. Randy notes that Jeff had asked for a longer contribution time frame, as contributions tend to be bursty. Randy had suggested that we use a number of meetings rather than a calendar time, since that is a proxy for workload, and our meetings are somewhat irregular. Tucker says that he thinks the right number is six meetings. There is no objection to that choice. “One of the last six meetings” is the suggested wording for the contribution requirement. [Editor’s note: This wording should say “one of the last six ARG meetings” to be unambiguous and to match the wording for the attendance requirement which is directly above it.] Approve Procedures with changes: 12-0-0. Progress report on the Corrigendum Randy had circulated a set of questions and recommendations. This can be found at: http://www.ada-auth.org/ai-files/grab_bag/Corrigendum-Inclusion-Questions.pdf We will agree with Randy’s recommendation unless an objection is voiced. If there is an objection, then we’ll discuss the point and decide a direction. We have an ultimate vote at the end to approve all of these questions. In these minutes, we will just give the question number and the discussion and result. Refer to the original document linked above for the details on the questions and recommendations. #1 Approved. #2 Approved. #3 Approved. #4 Approved. #5 Jeff says the UK has interest in these attributes. Regardless, we still need a bug to fix in order to include this. No one offers one. Eventually we agree with Randy’s proposal. Approved. #6 Tucker would like to defer the discussion to the Technical Discussion part of this meeting. Randy proposes to add it to the beginning of the Technical Discussion period so that we get to it. Later, we circle back to this item. Tucker claims that these AIs are reasonable, separate from any other considerations. Even if we were to adopt a more complete solution, it doesn’t make sense for the reference types to be nonlimited, and the assignment change is a reversion to the Ada 95 rule, a change which was never needed, only justified in the name of uniformity. So the recommendation is to include the three AIs. Then we need to see if we still need the recommendation of Github #131. (Randy thinks that most of the customer problems will disappear if GNAT actually implements these AIs.) Approve inclusion of these AIs in the Corrigendum. #7 Approved. #8 Approved. #9 Approved. #10 Approved. #11 The questions should say 0049, not 0036. Approved with change. #12 Tucker thinks it should be left out. His criteria against is that it is adding a new term and it will require some significant work from implementers. Randy’s position that the work already has to be done doesn’t get much traction. Tucker notes that the AI still will be in the (full) draft and the more important thing is to get implementers on board with it. So we will omit this from the Corrigendum. #13 Tucker withdraws his objections to not including these. He now agrees that these are most important in a revision. Approved. #14 Tucker thinks it should be in. Randy is concerned that it could be a significant amount of work, since converting from a ratio of long byte strings to a number accurately is not the easiest task. Tucker thinks that it should be similar to the existing fixed point version, and this omission is different than our usual practice for fixed point generics (which is mainly Text_IO). Straw poll: Including this AI: 5 for; 1 against; 8 abstentions (one observer voted). So include this one and reclassify as a Binding Interpretation, Omission. #15 Approved #16 Approved #17 Tucker says that there is a lot of change here. Christoph says that AI22-00118-1 says that there is a problem with the canonical order wording, which was then fixed in AI22-0119-1. But that wording doesn’t make sense. We need to reconsider this. At a minimum, it needs to explain that this AI is fixing a bug. Tucker suggests fixing the bug separately from the canonical wording changes, since the fix really is avoiding using that wording altogether. Steve recommends leaving this out the Corrigendum and reconsidering it later. Approve leaving it out. Tucker will get this AI back as he was the author of record. #18 Tucker thinks it is too much implementation work for the Corrigendum. No one objects strongly. So leave this one out, and do not reclassify. #19 - #23 Are all changes of the qualifier. No one wants to talk about this long enough to even understand what is happening here; we trust Randy. [Insert evil laugh here.] Approved. #24 Randy points out this is fixing a critical bug: Unchecked_Deallocation uses this feature in its Global contract, so it has to be explained. So this is approved (including updating the AI to explain why this is important). #25 Approved. #26 Leave this out, reclassify. This will have to be separately approved by WG 9. Tucker suggests that we don’t reclassify. Randy looks up the meaning of Binding Interpretation. It doesn’t seem to cover this case well. We agree to reclassify. Approve recommendations with changes: 11-0-2. Christoph, Niklas abstain. Thanks to Randy for doing this substantial work. Unfinished Action Items Randy asks Tucker about the AI for Github #100. He says that he did not do that. We did not discuss the other action items. Current Action Items The combined unfinished old action items and new action items from the meeting are shown below. Steve Baird: • AI22-0076-1 (with help from Tucker Taft) Randy Brukardt: • Build the Corrigendum and circulate in time for the WG 9 agenda. Editorial changes only: • AI22-0101-1 • AI22-0123-1 • AI22-0130-1 Christoph Grein: • AI22-0129-1 (with assistance from Tucker Taft) Justin Squirek: • ACATS C-Test(s) for filters Tucker Taft: • AI22-0063-1 (Split work with Richard Wai) • AI22-0071-2 • AI22-0076-1 (assist Steve Baird) • AI22-0119-1 • AI22-0129-1 (assist Christoph Grein) • Github Issue #100 Richard Wai: • AI22-0063-1 (Split work with Tucker Taft) Detailed Review The minutes cover detailed review of Ada 2022 AIs (AI22s). The AI22s are presented in numeric order, which is not necessarily the order in which they were discussed. Votes are recorded as “for”-“against”-“abstentions”. For instance, a vote of 6-1-2 would have had six votes for, one vote against, and two abstentions. If a paragraph number is identified as coming from the working Ada 202y AARM, the number refers to the text in draft 3 of the Ada 202y AARM. Paragraph numbers in other drafts may vary. Other paragraph numbers come from the final Ada 2022 AARM; again the paragraph numbers in the many drafts may vary. Detailed Review of Ada 2022 AIs AI22-0101-1/08 Valid_Scalars attribute is defined Randy explains that he made the changes requested. There were three: Make all-scalar composites types untagged only; ban the use of Valid_Scalars on objects of types that are or might be class-wide; and have Valid_Scalars raise Program_Error if it needs to read the discriminant of an unchecked union type. He noted that some of the normative wording can only have an effect when the prefix is abnormal (thus, execution of the attribute is necessarily erroneous). There, he thinks that wording should be made into AARM implementation notes. Tucker says that he would like as little normative wording as possible, and defining how erroneous execution should work is unnecessary. So he concurs. Approve AI with changes: 12-0-1 Christoph abstains. AI22-0123-1/05 Type of aggregates and raise expressions [Editor’s note: Need to fix the !standards in this AI.] Tucker worries that it is weird for literals. Wordsmithing of the wording ensues. Bob wonders if this is really better than just adding a To Be Honest note. It’s still pretty handwavy. We think it is clearer than the original wording. Approve AI with changes: 11-0-2. Jeff, Gary abstain. AI22-0126-1/01 Finalization order of temporary objects Randy explains the AI. We never explain beyond saying which master a given temporary object should be finalized in. We should at least say that the order of such finalizations is unspecified within the appropriate master. The wording was crafted to ensure that no one thinks that temporaries can leak out (or in) to other masters. The other wording change was made because expressions can include declared items as well as anonymous objects since Ada 2012 (quantified expressions declare a loop parameter) and certainly in Ada 2022 declare expressions (the name alone tells us that they declare things). So this wording should be covering anything that needs to be finalized that is associated with this master, and not appear to be just talking about anonymous objects. Approve AI: 13-0-0. Randy notes that we will be putting these AIs into the Corrigendum (they will be the last new ones). AI22-0127-1/02 Elaborate_Body is a library unit aspect Randy explains that he forgot two words when changing from pragmas to aspects (which was done late in the Ada 2022 work). Tucker had objected about the subtly of declaring these aspects, but that is the case for all library unit aspects (both in 10.2.1 and in Annex E). A meaningful update will require reorganizing 10.2.1 (which might be a good idea anyway), and we shouldn’t let that prevent fixing a simple bug. In discussing this question, Randy realized that the definition of library unit aspect was subtly wrong in that it allowed the aspect on library-level renaming declarations. The pragmas are allowed on all library unit declarations (one way or the other) except renamings, so the aspect should be the same. Moreover, renamings always keep the same properties as the original unit. (Can you imagine a renaming declaring Text_IO Pure? That seems legal with the current rules.). As such, he added an exclusion for renamings. There is an existing rule banning language-defined aspects on completions (unless otherwise specified, which doesn’t happen here), so we don’t need wording to prevent these on bodies. Approve AI: 13-0-0. AI22-0128-1/01 Evaluation of Relative_Deadline aspect Steve explains that the evaluation of aspect Relative_Deadline is hidden in some wording which never mentions “evaluation”. Randy notes that it is hard to find wording about evaluation which uses the plain English term “computation” rather than the defined term “evaluation”. They propose to rewrite the wording in a more usual form. Approve AI: 13-0-0. AI22-0129-1/01 Usage example for protected type with dynamic predicate Christoph Grein added a Usage Note. He found it surprising that the location of a Dynamic_Predicate mattered in whether it was legal. Jeff notes that we are leaving most Usage notes out of the Corrigendum, so this one would be left out as well. (This proved moot, as we didn't approve the AI.) We wordsmith the wording and the example. This goes on for quite a while without making much progress. Randy calls time on the wordsmithing; he notes that we have a rule limiting wordsmithing to 60 seconds, and we are well over 5 minutes on this one. Tucker volunteers to help Christoph with the wording. Approve intent: 13-0-0. AI22-0130-1/01 Bounded Queues Capacity Steve explains that there is a problem with a component of these types being possibly huge (for implementations that implement assume-the-worst for defaulted discriminants). This provides a mechanism to avoid the problem. There is an optimization that can avoid the problem for stand-alone objects, but it was determined that that optimization is inappropriate for components, as initializers can set other discriminant values. This was a customer bug at AdaCore, so we ought to fix it. There is some confusion that the instantiation is not shown in the discussion; it would be clearer if it was shown. Gary would like an aggregate in this example to show that the component Q could be initialized with a function call and a larger than default capacity. Obj : R := (Q => Make (100)); Approve AI with changes: 13-0-0.