To: J3 J3/25-161 From: Malcolm Cohen Subject: Editor's report for 25-007r1 Date: 2025-July-29 Reference: 25-007, N2244. 1. Overview 25-007r1 is the revised base document for Fortran 2028 development. The revision includes the following changes: a. ligatures (such as "fi") are now searchable and copyable; b. typesetting changes to eliminate overfull "hbox" messages (these have text extending into the right margin or overwriting other text); c. Corrigendum 1 changes. 2. Ligatures It has turned out that xelatex has some problems with these, specifically with its Cambria font where the output is significantly worse than it ought to be. A LaTeX Team member recommended changing from xelatex to lualatex, as xelatex is no longer being actively developed and lualatex had no problems with the particular output forms we wanted. Thus we have changed to lualatex. The makefile for this is LMakefile. The Cambria font that lualatex uses has a slightly heavier weight (without being "bold") than the one used by xelatex, so the text appears a little darker. The readability seems to be unimpaired by the increased heaviness. 3. Concomitant changes I noticed that we were still using Latin Modern for the "math font". There is a Cambria Math font, but that seems to have a bug in it (I am still tracking this down), so instead I changed the maths to use plain Cambria. This required changing to use unicode-math, and that meant that in some contexts, \uppi (defined by unicode-math) needed placing in parentheses. That might be a (very minor) bug in the package, but the workaround is safe as well as trivial. Made a new base document file 007lua.tex replacing 007xe11.tex which itself replaced 007.tex. Made a new class file j3lua.cls replacing j3xe11.cls, which itself replaced j3.cls. There were no changes needed (at one time I expected there to be), so this is cosmetic. lualatex has no -quiet option, so added a shell script quiet_lualatex.sh to achieve a similar effect, viz no output if no error occurs, and some output if an error occurs. 4. Corrigendum 1 application and changes Each interp in Corrigendum 1 was applied individually, to minimise the risk of error and maximise spotting where improvements should be done. F23/003 (Conflicting rules for COMMON block names) EXTRA: There was supposed to be a footnote in 14.2.2 NOTE 4, saying that COMMON and EQUIVALENCE statements were obsolescent. This was not appearing. Made it into a normal sentence instead of a footnote. COMMENT: This might be a general problem with footnotes inside NOTEs, i.e. it might have occurred somewhere else too. DIFFERENT at [528:15] The edit mistakenly inserted an extra comma; I did not do that. F23/004 (OUT_OF_RANGE and ROUND argument) Done without any change. F23/005 (Defined assignment/operators and dynamic type) Done without any change. F23/006 (Underflow in IEEE_SCALB) DIFFERENT at [xiii] Not appended to the "Intrinsic modules" bullet but to the bullet "Changes to the intrinsic module IEEE_ARITHMETIC for conformance with..." instead. NOTE: In 25-007r1, the Introduction from Fortran 2023 appears in Annex C subclause C.1.1. DIFFERENT at [33:13+] After IEEE_SCALB inserted "(X, I)" to provide antecedents for the later use of X and I in the inserted sentence. Also used maths for the maths instead of Fortran code. F23/008 (Real argument I in IEEE_SCALB) DIFFERENT at [xiv] Instead, inserted in the new sentence from F23/006 above re IEEE_SCALB "; the function has also been changed to implement the scaleB operation". F23/009 (Coarray subobject of component) Done without any change. F23/010 (MOVE_ALLOC with coarray arguments) DIFFERENT Reworded because the interp edit used "correspond" confusingly in "it shall correspond". The reworded text is "If it is a coarray, the FROM arguments in corresponding invocations of MOVE_ALLOC shall be corresponding coarrays." NOTE: In the descriptions of the collectives, "corresponding coarrays" is followed by "as described in 5.4.7". We probably don't need to do that here, as long as "corresponding coarrays" is indexed and points to 5.4.7. Even better if it were hyperlinked to 5.4.7. DIFFERENT New text added before the sentence about INTENT, as I thought it fitted better there. (We are not completely consistent about the ordering of these things...) F23/011 (NULL and procedure pointers) Done without any change. F23/012 (Coarray correspondence in DEALLOCATE) COMMENT: We should index "corresponding coarrays" in 5.4.7 and hyperlink all the uses of "corresponding coarrays" to 5.4.7. Its meaning is too obvious for making it to be a term to be a good idea (there is no good simple definition that is not circular). NOTE: I made a start on doing some of that, but didn't get very far. DIFFERENT at [152] Changed "subcomponent" to "potential subobject component". If there is an allocatable (non-coarray) component in betweeen the base object and the coarray component, it is not obvious that "subcomponent" works, but "potential subobject component" is definitely ok. F23/013 (BOZ literals in interoperable enumerators) REMARK TO THE EDITOR: Maybe I should make macros constinx/constinxu instead of reusing funcinx/funcinxu. for e.g. C_INT, C_CHAR, plus others in the ISO_FORTRAN_ENV module. DIFFERENT at [7.6.1p6, 96:5-9] item (1a) Capitalised "If" at the beginning of the inserted sentence. F23/015 (Coindexed objects in structure constructors) DIFFERENT at [93:23-] In the inserted NOTE, changed "the structure constructor" -> "a structure constructor", because we don't have a particular one in mind here, in the note. Also changed "and thus" -> "and is thus", which I think reads better. F23/017 (CFI_establish nonallocatable nonpointer null base address) Dpne with any change. F23/018 (Correspondence of unallocated coarrays) EXTRA: Indexed initial team, current team, parent team, and team number where they are defined in clause 5; also some of the uses there. As defined terms they are also indexed in clause 3, but it is clause 5 that really defines them. DIFFERENT at [49:27] Corrected disagreement in number "its corresponding coarrays" [plural] "are the same components" (plural) "of the base object" (singular!) "that has the same name in that scoping unit" to "each corresponding coarray is the same component". Similarly, changed "the array element for its corresponding coarrays has" to "the array element for each corresponding coarray has". EXTRA: Hyperlinked "array element order" to its definition. ---------------------------------------------------------------------- 5. Typesetting changes These changes were made to correct overly-long lines etc. Some changes also improve the exposition, but that was not the reason for any change. Location information is as in 25-007r1. [214:9-10] 11.1.7.4.2 DO CONCURRENT loop control, p3, "If there is no scalar-mask-expr, it is as if it appeared..." -> "If no scalar-mask-expr appears, it is as if it appeared..." [347:21] 15.5.2.3 Conditional argument correspondence, p1, "If an actual-arg is a conditional-arg, each scalar-logical-expr is evaluated in order, until the value..." "If an actual-arg is a conditional-arg, each scalar-logical-expr is evaluated in order, until either the value..." [450:7-10] 16.9.138 MAXVAL, p5 Result Value, Case (iii), Improved the spacing of the Fortran pseudo-code here to conform with our style rules, in order to get better layout. I think we deliberately diverged from our style rules previously due to the different layout resulting from the use of Latin Modern (including in maths mode). [544:3] 18.2.3.5 C_F_STRPOINTER, p5 Example, Case (i), Changed comment from "Limit result to 1020 characters." to "Max length for sval is 1020." so that it fits on the line. [593:5] Annex A, bullet beginning "the order of finalization when", Changed "several objects are finalized as the consequence of a single event (7.5.6.2);" to "a single event causes several objects to be finalized (7.5.6.2);" so that it fits on a single line and is not overly long. [596:39-40] Annex A, in bullet "- the value assigned to the seed by the intrinsic subroutine RANDOM_SEED when no argument is present (16.9.169);" Inserted a hard line break between "is" and "present"; that was the only reasonable way I found to prevent an overly long line or harmful hyphenation. [621:13,14,18] C.7.7 Accessing coarrays in sibling teams, Changed name of the TYPE(TRANS_T) variable from TRANS to TX, so that the assignment of the structure constructor to it fitted on the lines. [623:5-6] C.7.8 Example involving failed images, p2, near the end, Changed "IF (status/=0 .AND. status/=STAT_FAILED_IMAGE) PRINT *,'Unexpecte& &d failure',status" (all on one line) to "IF (status/=0 .AND. status/=STAT_FAILED_IMAGE) & PRINT *,'Unexpected failure',status" (i.e. two lines). [641:44-45,50-51,53-54] C.10.4 Modules with submodules (14.2.3), p9, In the calls to color_point_new, color_point_dist, and color_point_del, break the comment after "color_points_a," putting "interface in color_points", because they did not fit on a single line. [644:49] C.11.4 Pointers and targets as arguments, p3, In "CALL BEST (PBEST, B) ! On return..." delete two spaces (leaving two) before the exclamation mark, so that the comment fits on the line. [655:3-12] C.13.2 Example of Fortran calling C, Fortran Module (before p1), Indent the nested constructs by two spaces per level instead of three. [662:29] C.13.9 Processing assumed-rank in C, p4, In "int elemental_mult_c(CFI_cdesc_t..." delete the spaces between each asterisk and its following formal parameter name. (We are very inconsistent with this, but there is frequently no space in this context. Anyway, it is needed to fit on one line.) ===END===