C++ Compiler Standards and Sanctioning

------------------------------------------------
C++ Working Group - Run II Committee
Fermilab at Work - Fermilab Home - Telephone/email - Search - Help
------------------------------------------------

To be sanctioned and supported for use in Run 2 development, a particular compiler/platform combination must properly support certain required C++ language features. This will tell developers which features they may safely use, expecting good portability. Moreover, when creating packages or class libraries intended as tools for the Fermilab (Run 2) community, developers can ensure that these are available to everybody by checking for proper behavior with all sanctioned compilers. So the library/package developer may rely on and freely use those compiler features required for sanctioning -- and only those properties.

There will be a mechanism for this set of required features to slowly evolve as compilers more nearly apprach the ANSI standard, and/or if the draft standard evolves in important ways.

There must also be an available debugger meeting certain standards. Many debuggers with or without graphical front end enhancements will substantially exceed these requirements, improving the desirability of the compiler; but for the purposes of deciding whether to avoid a compiler in the Fermilab environment, only this minimal functionallity matters.

Comments on the contents of this page are solicited, for distribution to the working group.

View the collected comments.

Send a comment.


October 23, 1996

Compiler Features Required

The compiler features are based on the following considerations:

Based on these considerations, the following compiler sanctioning features and rules for evolution are presented. Note that this scheme involves two stages of additions to requirements, bringing the final requirements up to full ANSI C++ compliance.


Oct. 23, 1996

Debugger Features Required

To be sanctioned and supported for use in Run 2 development, a particular compiler/platform combination must support a debugger meeting certain standards. We don't anticipate many modern compilers not meeting this requirement; but this list will tell people what sorts of operations they can safely become dependant upon.

Note that nothing is said about how each capability is to be invoked. In fact, different debuggers will have different interfaces and we will not try to standardize on a particular one. When we say some capability is present, we do require that it can be used without unduly awkward operations on the part of the user.

Also, it is conceivable that a compiler will be acceptable because a combination of two debuggers gives all the needed features. For example, debugger A may do everything except understand a dump format, which can be looked at by debugger B. Again, we require that each of those be reasonable to use.

In listing these requirements, a debugger was pictured as having a graphical or windowing front end. For example, the ddd debugger appears to meet these standards, as to the Borland and Microsoft debuggers. In principle, a single-window text-based debugger could also satisfy these requirements (though it is hard to see how in some cases). Availbility of a text-based, command-line-based mode, (which could be run on a VT100, for example) may be a desirable option, even if this mode does not support all the standard features. But this is not a requirement imposed on every sanctioned compiler.

The debugger must have the following properties and convenient support features:

  1. It must be based on the C++ source:
  2. Knowledge of the compiler's naming (and "name-mangling") conventions, so that the user need not enter names beyond the names seen in the source.
  3. It must deal well with classes and inheritance, exploding is-a, has-a and defined-within (inheritance, aggregation and sub-class) relationships appropriately.
  4. Show and show-always on variables and structures. Examination of variables must not rely on the user typing invoved formatting strings (e.g. print "%d" myvar).
  5. Watch (show and break when it changes) on multiple variables.
  6. Deposit into variables and structures.
  7. Break points and conditional break points at:
  8. Single step, both into and over functions.
  9. Assembler-level capability: view and step through code at assembler level; examine registers and ranges of absolute (virtual) addresses.
  10. goto (run starting from) and function call capability from the debugger.
  11. Examine arrays of arbitrary size and individual elements of arrays and classes/structures.
  12. Properly accept and handle command line arguments, environment variables, and piped and standard input.
  13. Deal with signals in a meaningful way, providing options beyond merely always ignoring or always aborting on a particular signal.
  14. Examination of dump or core files if those are produced by the system when programs die. However, a sanctioned compiler/debugger combination on a platform which does not provide dumps will not be declared obsolete or non-sanctioned merely because a new release of the system now provides dumps which the debugger doesn't deal with yet.
In addition, any acceptable compiler/platform combination must support at least one of a small set of memory-leak/bounds-checking utilities. The acceptable utilities are those recommended by the Run 2 Utilties and Tools working group, or their designated sucessors.

------------------------------------------------
C++ Working Group - Run II Committee
Fermilab at Work - Fermilab Home - Telephone/email - Search - Help
------------------------------------------------

This working group is under the auspices of the Fermilab Run 2 Computing Strategy Committee.

C++ Working Group Webmaster: Marc Mengel

This page was written by Mark Fischler.