home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / std_unix / volume.28 / text0038.txt < prev    next >
Encoding:
Text File  |  1992-08-17  |  11.3 KB  |  242 lines

  1. Submitted-by: stephe@usenix.org (Stephen R. Walli)
  2.  
  3. ANSI X3J11 and ISO/IEC SC22/WG14: C Language
  4.  
  5.  
  6. Michael Meissner <meissner@osf.org> reports on the May 10-15, 1992
  7. meeting in Salt Lake City, Utah:
  8.  
  9. On May 10-12 of 1992, I attended the ANSI X3J11.1 meeting, and on May
  10. 13-15 of 1992, I attended the combined ANSI X3J11 and ISO WG14
  11. meetings.
  12.  
  13. For those people who aren't aware of how the various committees
  14. interact, and what their charter is, here is a thumbnail sketch. In
  15. the beginning was the ANSI X3J11 committee, which is the American
  16. committee chartered to produce a C standard. The first C standard was
  17. approved in December of 1989, and is available as X3.159-1989. The
  18. X3J11 committee is now doing interpretations, where they have to
  19. answer queries about the standard, but cannot change it.
  20.  
  21. Around 1988, the ISO WG14 committee was formed to lead the American C
  22. standard through as an international standard. In ISO, each country
  23. gets one vote, and the USA votes through ANSI. After reformatting the
  24. standard and moving some sections around to meet ISO guidelines, the C
  25. standard was approved as an international standard, which is available
  26. as ISO/IEC:9899-1989(E).
  27.  
  28. At the time the standard was approved, there were three open issues
  29. raised by Japan, Denmark, and England, and there was approval to work
  30. on a normative addenda to address the problems. (These issues are
  31. covered later.)
  32.  
  33. Around 1989, some people started meeting to discuss numerical issues
  34. and the C language. The committee, originally called NCEG (Numerical
  35. C Extension Group), has since become X3J11.1, a subcommittee of
  36. X3J11. Their charter is to produce a technical report, which does not
  37. have the weight of a ANSI or ISO standard. I suspect many of the
  38. X3J11.1 features will be items to be considered for the next ANSI/ISO
  39. C standard. This committee is made up of various interested parties
  40. who care about floating point calculations.
  41.  
  42. X3J11.1
  43.  
  44. X3J11.1 met for the first three days, from May 10 through May 12.
  45.  
  46. I went to the floating point extensions subgroup on Sunday night. For
  47. the most part, this meeting was uncontroversial. The floating point
  48. extensions group had submitted their draft to a letter ballot which
  49. passed, and the meeting was used to address minor editorial changes
  50. and comments from the ballot. The draft contains the following items:
  51.  
  52.    - New syntax for floating point constants, so that you can specify
  53.      the exponent and mantissa in hexadecimal, rather than decimal.
  54.  
  55.    - Printf/scanf %a/%A format specifiers to print the floating number
  56.      in the new hexadecimal format.
  57.  
  58.    - More math functions.
  59.  
  60.    - Overloaded math functions - these functions are a step towards
  61.      C++ style overloading: if the arguments are single precision, the
  62.      calculation is done in single precision. Unlike C++, these are
  63.      only required for the system functions and not the user functions.
  64.  
  65.    - Requirements on exactly when Nan/Infinity/-0 is produced from the
  66.      various match functions if the system uses IEEE 754/854 floating
  67.      point. (Most systems these days use IEEE 754 format).
  68.  
  69.    - Adding IEEE unordered comparisons (!>, etc.) which return true if
  70.      either value is a Nan, instead of false.
  71.  
  72.    - Adding floating point classification functions.
  73.  
  74.    - Ways to get/set exception flags.
  75.  
  76.    - Two new include files are added.
  77.  
  78. On Monday and Tuesday, I went to the normal X3J11.1 meetings. The
  79. following items were discussed:
  80.  
  81.    - The restricted type qualifier proposal had a successful letter
  82.      ballot, and will go outside of X3J11.1 for review. This proposal
  83.      is half-way between the current situation where the compiler
  84.      can't fully vectorize, and noalias, which got shot down before
  85.      the standard went out. It adds a new qualifier, restricted,
  86.      which says that you promise that the given pointer is the only way
  87.      a particular item is referenced. This will allow a function to
  88.      take two restricted pointers, and to fully vectorize the
  89.      accesses, because the compiler doesn't have to worry about
  90.      overlap cases.
  91.  
  92.    - Automatic variables with variable dimensions were discussed, but
  93.      no conclusion was reached. There are two proposals on the floor,
  94.      one from Cray and the other from USL. The Cray proposal would
  95.      require people to pass the bounds explicitly for arrays, and has
  96.      problems in scoping if the bound is passed after the array. The
  97.      USL proposal which is authored by Dennis Ritchie, would pass a
  98.      ``fat'' pointer, which is a descriptor that contains the bounds
  99.      as well as the pointer. The debate went on as to which was more
  100.      in the spirit of C. I personally tend to favor the USL proposal.
  101.  
  102.    - Designated initializers will go out for a review. These allow a
  103.      programmer to initialize a structure or array out of order. For
  104.      example:
  105.  
  106.      struct foo { int a, b; } st = { .b = 1, .a = 2 };
  107.      int foo2[10] = { 1, [5] = 2, 3 };
  108.  
  109.  
  110.      (In the array example, element 6 is initialized to '3'). Gcc 2.0
  111.      has a similar feature, though the syntax is slightly different.
  112.  
  113.    - Compound literals will go out for a review. These allow a
  114.      programmer to create an automatic (or static if at file scope)
  115.      aggregate without having to give it a name. Gcc has this
  116.      feature. For example:
  117.  
  118.      foo (&(struct bar){ 1, 2 });
  119.  
  120.    - The floating point extensions draft mentioned earlier was
  121.      approved to go out for a review. One item that will go in a
  122.      cover letter is to warn people that the #pragmas specified may be
  123.      changed into macros, since pragmas are not allowed inside macro
  124.      expansions.
  125.  
  126.    - The complex arithmetic draft was not ready to be sent out for
  127.      review at this time. The draft needs to be more fully specified
  128.      for IEEE floating point with respect to Nans and Infinities.
  129.      Also, there was concern that the complex functions be folded in
  130.      with the overloaded functions (ie, having just sin instead of
  131.      csin). Finally, some people feel that in addition to real, and
  132.      complex types, there needs to be an imaginary type that has no
  133.      real component, particularly in the case with Nans and Infinities.
  134.  
  135.    - There was some spirited discussion about extended integers and 64
  136.      bit machines. The 64-bit consortium (vendors who will be
  137.      producing 64 bit CPUs) want the ANSI group to exactly specify
  138.      what sizes short, int, long, etc. are in 64 bit environments.
  139.      Given that ANSI committees typically take years to come down from
  140.      the mountain, and the 64-bit consortium needs to deliver products
  141.      soon, it was hopeless. Also, there are good reasons why the
  142.      standard only gives minimums. The crux of the problem is that
  143.      when you move to 64 bits, programs will break (just like they did
  144.      in moving 16 bits to 32 bits, but there is more extant code in C
  145.      now). No matter what you choose, you break somebody's cherished
  146.      notations. One camp wants int, pointer size, and long to all be
  147.      64 bits, and there is no explicit 32 bit type. Another camp
  148.      wants int to be 32 bits, and pointers/long to be 64 bits.
  149.      Finally at least one person wanted int to be 64 bits and long to
  150.      be 32 bits. The C committee roundly reviled any rule that broke
  151.      the rule that sizeof (int) <= sizeof (long), but otherwise had no
  152.      comments to send back to the 64-bit consortium.
  153.  
  154. The array syntax subgroup met on Monday night. This group is charged
  155. with doing things to arrays, so that fast code can be generated on the
  156. vectorizers and/or massively parallel machines (essentially Cray vs.
  157. Thinking Machines). The meeting quickly broke down into shouting
  158. matches and such. I felt that it made negative progress, to the point
  159. that the only positive vote was a ``motherhood'' vote on the group's
  160. charter. There was another array syntax subcommittee meeting on
  161. Tuesday night (and possibly Wednesday night also), but I declined to
  162. attend.
  163.  
  164. ANSI X3J11/ISO WG14
  165.  
  166. On Wednesday through Friday (May 13 - May 15), the ANSI X3J11 and ISO
  167. WG14 met together. At times the meeting was run in ANSI X3J11 mode,
  168. and at other times it was in ISO WG14 mode. The primary objective for
  169. the ANSI part of the meeting was to answer questions about the
  170. standard. The primary objective of the ISO part of the meeting was to
  171. deal with the three proposed normative addendum.
  172.  
  173. The U.K. addendum is designed to tighten up the wording of the
  174. standard, but not to make any substantive changes. The goal of the
  175. Japanese addendum is to add additional wide character functions and a
  176. new header in which to declare them. The Danish addendum provides
  177. alternatives to the ANSI trigraphs, while not using any of the
  178. national replacement characters from ISO 646.
  179.  
  180. The big news is that the ANSI C standard will soon be withdrawn and
  181. replaced with the ISO C standard, so that the standards remain
  182. synchronized. This means that chapter and verse quotations will soon
  183. change, due to paragraph renumbering required by ISO. Also, when the
  184. normative addenda come out, they will become part of the ANSI C
  185. standard, in addition to the ISO C standard.
  186.  
  187. Some of the decisions reached in talking about the Japanese addenda
  188. include:
  189.  
  190.    - Wide character I/O functions can return errors if they can't
  191.      translate multibyte <-> wide characters. Errno is set to EILSEQ
  192.      upon such an error.
  193.  
  194.    - If a wide character value is >= 0 and <= UCHAR_MAX, then the
  195.      single byte character classification functions (isprint(),
  196.      isspace(), etc.) if true, implies that the wide version
  197.      (iswprint(), iswspace(), etc.) is also true. If the single byte
  198.      version is false, it does not imply that the wide version also
  199.      returns false. This is to allow wide characters to fill up
  200.      positions in the encoding that aren't valid single byte values.
  201.  
  202.    - We voted against adding more support for mixing multibyte and
  203.      wide character strings in the *printf()/*scanf() family of
  204.      functions. The proposal was for %hs to always mean multibyte
  205.      characters in both printf() and wprintf(), %ls would always mean
  206.      wide characters, and %s would mean either multibyte or wide
  207.      characters, depending on whether the function was printf() or
  208.      wprintf().
  209.  
  210.    - The new function wcswcs() (wide version of strstr()), got renamed
  211.      to wcsstr(), since most people felt that the second
  212.  
  213.    - We voted not to reserve the wide stdio functions for a future
  214.      standard to put in stdio.h (ie, you always have to include
  215.      wchar.h to properly declare those functions).
  216.  
  217.    - We voted that no illegal multibyte sequence will be emitted by
  218.      the wide character output routines (including through %S or %C in
  219.      printf()).
  220.  
  221.    - We voted that only a single byte space terminates scanf(``%S''),
  222.      ie. not iswspace(), to allow for logically ungeting just a single
  223.      byte.
  224.  
  225.  
  226. The Danish digraph proposal was shot down (again). I suspect it may
  227. be for the last time, because more countries are concerned about
  228. delaying the rest of the addenda for this one small issue. Japan and
  229. the Netherlands both voiced this opinion for the first time at this
  230. meeting.
  231.  
  232. There will be letter ballots sent out on the various responses to
  233. interpretation requests. One letter ballot will cover all decisions
  234. in which there were no ``no'' votes at the committee, and one letter
  235. ballot will be sent out for each decision that had at least one ``no''
  236. vote. It is hoped that the draft for the document of interpretation
  237. requests will be passed in the letter ballot, so it can be sent out
  238. for the next meeting (6 months from now).
  239.  
  240. Volume-Number: Volume 28, Number 40
  241.  
  242.